一 , struts2 的处理结果类型
chain 用来处理Action链的结果类型
chart 用来处理jfreeChart图标的结果类型,
dispatcher 用来转向页面,通常处理jsp,html页面的结果类型,是struts2的默认结果类型
freemaker 用来处理freemaker的结果类型
httpheader 用来控制特征http行为的结果类型
jasper 用来处理jasperReports报表的结果类型
jsf 处理jsf的结果
redirect 用来直接跳转到某个url的结果类型
redirectAction 用来直接跳转到某个Action类型
stream 用来向浏览器发生InputStream对象,通常用来处理文件下载,还可以用于返回Ajax数据
titles 用来与titles框架整合的结果类型
velocity 处理velocity模板
xslt 处理xml/xlst模板结果类型
plaintext 用来显示原始文件内容,文件源代码
二 , 定义全局 result ,对全局都有效,局部只对当前Aciton有效
<global-results>
<result name="exception">/exception.jsp</result>
全局 result ,局部在跳转时可以带参数,参数名为actionName,值为viewCart
<result name="toViewCart" type="redirect-action">
<param name="actionName">viewCart</param>
</result>
</global-results>
<action name="login" class="com.xiu.LoginAction" method="login">
物理视图使用OGNL表达式进行动态表示, targetUrl是当前Action实例中的一个属性
<result name="target">${targetUrl}</result>
</action>
三, OGNL(Object Graphic Navigation Language 对象图导航语言)
OGNL是一种强大的EL表达式语言,
struts2将ActionContext 设置为OGNL中的上下文, 值栈valueStack则是OGNL上下文中的根元素,这样一来就可以通过OGNL表达式从
值栈ValueStack 中自上至下的读取对象或者对象的属性 ,
如果值栈中person与dog 两个对象均包含name属性,当我们读取name属性时,首先会返回栈顶person对象的name属性,
这是由堆栈数据结构的特性所决定的。
在OGNL表达式语言中,访问根元素(如值栈valueStack)中的对象或者属性时可直接使用${属性名}的方式,
值得注意的是,struts2创建的业务控制器Action实例是保存在valueStack中的,因此 Action的属性同样
可以直接访问,
${loginName} //读取valueStack中的 loginName属性
其实,ActionContext中还有几个与valuestack无关,且常用的命名对象,如 parameters,request,session,application,attr,
在访问时加上#号
#parameters['p'] 或者#parameters.p 等同于request.getParameter("p");
#request['p'] 或者#request.p 等同于request.getAttribute("p");
#session['p'] 或者#session.p 等同于session.getAttribute("p");
#application['p'] 或者#application.p 等同于application.getAttribute("p");
四, ActionContext与ValueStack的关系
五,OGNL的用法如下
#属性名, #parameters['p'] 或者#parameters.p 等同于request.getParameter("p");
#request['p'] 或者#request.p 等同于request.getAttribute("p");
#session['p'] 或者#session.p 等同于session.getAttribute("p");
#application['p'] 或者#application.p 等同于application.getAttribute("p");
% 当标签的属性为字符串时,计算OGNL表达式的值 <s:set name="label" value="%{getText('label-rownum)}"/>
{元素1,元素2,元素3} 定义一个拥有n个元素的list对象,如{'green','red','blue'}
#{'key1':'value1','key2':'value2'} 定义拥有n个元素的map对象, #{'menu1':'a','menu2':'2'}
@类全名@静态属性名 @com.xiu.LoginAction@SUCCESS
@类全名@静态方法 @com.xiu.LoginAction@isLogin()
集合对象(元素的公共属性名) userList.{username} 取得所有用户的的姓名列表
#this 当前对象的引用, 等于this
?选择符 选择满足条件的所有元素 userList{?#this.age>18} 将选择所有年龄大于18岁的用户
^ 选择符 选择满足条件的第一个元素, userList{^#this.age>18} 将选择年龄大于18岁的第一个用户
$选择符 选择满足条件的最后一个元素, userList{$#this.age>18} 将选择年龄大于18岁的最后一个用户
六, struts的异常处理
异常分为全局异常和局部异常
1.将exception-mapping放置在global-exception-mappings元素中时,表示全局异常,全局异常将对所有Action有效
2.将exception-mapping放置在action中时表示局部异常只对当前action有效
定义为全局result
<global-results>
<result name="exception">/exception.jsp</result>
</global-results>
定义为全局异常
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception"/>
</global-exception-mappings>
在页面中使用<s:property value="exception.message"/>
本文详细介绍了 Struts2 中各种处理结果类型的作用与使用场景,并深入探讨了 OGNL 的语法及其在 Struts2 中的应用方式,包括如何利用 OGNL 实现动态页面跳转。
1万+

被折叠的 条评论
为什么被折叠?



