您的位置:首页 > 编程语言 > Java开发

struts2学习之---配置处理结果

2017-07-06 09:50 393 查看
Action处理完用户请求之后,将返回一个普通字符串,整个普通字符串就是一个逻辑视图名。Struts2通过配置逻辑视图名和物理视图名之间的映射关系,一旦系统受到Action返回的某个逻辑视图名,系统就会把对应的物理视图呈现给浏览者。

1.配置结果

struts2在struts.xml文件中使用
<result.../>
元素来配置结果,根据
<result.../>
所在位置的不同,分为:

局部结果:将
<result.../>
作为
<action.../>
元素的子元素配置。

全局结果:将
<result.../>
作为
<global-results.../>
元素的子元素配置。

配置
<result.../>
元素时通常有两个属性:

name:该属性指定所配置的逻辑视图名。

type:该属性指定结果类型。

struts2默认的结果类型就是dispatcher(用于与JSP整合的结果类型)。

省略了name属性,系统将采用默认的name属性值,默认的name属性值为success。

2.struts2支持的结果类型

 结果类型决定了Action处理结束后,下一步将调用哪种视图资源来呈现处理结果。struts2的结果类型要求实现com.opensymphony.xwork2.Result,这个结果是所有结果类型的通用接口。

1.plainText结果类型

 这个结果类型不常用,因为它的作用太过于局限,主要用于显示实际视图资源的源代码。

location:指定实际的视图资源。

charSet:指定输出页面时所用的字符集。

<result type="plainText">
<param name="loaction">/WEB-INF/content/welcome.jsp</param>
<param name="charSet">GBK</param>
</result>


2.redirect结果类型

这种结果类型与dispatcher结果类型相对,dispatcher结果类型是将请求forward(转发)到指定的JSP资源;而redirect结果类型,则意味着将请求redirect(重定向)到指定的视图资源。重定向会丢失所有的请求参数、请求属性,当然也会丢失了Action的处理结果。

使用redirect结果类型的效果是,系统将调用HttpServletResponse的sendRedirect(String)方法来重定向指定视图资源,这种重定向的效果就是重新产生一个请求。当Action处理完用户请求后,再次向视图资源发送一次新的请求。

location:该参数指定Action处理完用户请求后跳转的地址。

parse:该参数指定是否允许在location参数中使用表达式,默认是true。

3.redirectAction结果类型

这种结果类型与redirect类型非常相似,一样是重新生成一个全新的请求,区别在于:redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求。

当需要一个Action处理结束后,直接将请求重定向(是重定向,不是转发)到
4000
另一个Action时,就应该使用这种结果类型。

actionName:该参数指定重定向的Action名。

namespace:该参数指定需要重定向的Action所在的命名空间。

3.动态结果

动态结果的含义是指在指定实际视图资源时使用了表达式语法,通过这种语法可以允许Action处理完用户请求后,动态转入实际的视图资源。

<action name="crud_*" class="" method="{1}">
<result>/WEB-INF/content/{1}.jsp</result>
</action>


4.Action属性值决定物理视图资源

<action name="save" class="" method="save">
<result type="redirect">edit.action?skillName=${currentSkill.name}</result>
</action>


上面的配置中使用过了
${currentSkill.name}
表达式来指定结果视图资源,要求在对应的Action实例里包含currentSkill属性,且currentSkill属性必须包含name属性,否则表达式的值为null。

<result>/WEB-INF/content/${target}.jsp</result>


这要求在对应的Action类里应该包含target属性,该属性值决定实际的视图资源。

5.全局结果

当在
<global-results.../>
元素中配置
<result.../>
元素时,该
<result.../>
元素配置了一个全局结果,全局结果对所有的Action都有效。

如果一个Action里包含了与全局结果里同名的结果,则Action里的局部Result会覆盖全局Result。当Action处理用户请求结束后,会首先在本Action里的局部结果里搜索逻辑视图对应的结果,只有在Action里的局部结果里找不到逻辑视图对应的结果,才会到全局结果里搜索。

6.使用PreResultListener

PreResultListener是一个监听器接口,它可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。

struts2应用可由Action、拦截器添加PreResultListener监听器,添加PreResultListener监听器通过ActionInvocation的addPreResultListener()方法完成。一旦为Action添加了PreResultListener监听器,该监听器就可以在应用转入实际物理视图之前回调监听器的beforeResult()方法;一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器的所有Action起作用。

public class LoginAction extends ActionSupport{
private String username;
private String password;

public String execute() throws Exception{
ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
invocation.addPreResultListener(new PreResultListener{
public void beforeResult(ActionInvocation invocation,String resultCode){
System.out.println("返回的逻辑视图名为:" + resultCode);
invocation.getInvocationContext().put("extra",new java.util.Date() + "由" + resultCode + "逻辑视图名转入");

}
}
)

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: