读书人

Struts2 result type(部类)总结

发布时间: 2012-06-26 10:04:13 作者: rapoo

Struts2 result type(类型)总结

在默认时,<result>标签的type属性值是“dispatcher”(实际上就是转发,forward)。开发人员可以根据自己的需要指定不同的类型,如redirect、stream等。如下面代码所示:

<result name="save" type="redirect">

?????? /result.jsp

</result>

这此result-type可以在struts2-core-2.0.11.1.jar包或struts2源代码中的struts-default.xml文件中找到,在这个文件中找到<result-types>标签,所有的result-type都在里面定义了。代码如下:

<result-types>

??????? <result-type name="chain" default="true"/>

??????? <result-type name="freemarker" />

??????? <!-- Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->

??????? <result-type name="redirect-action" />

</result-types>

?

chain????
???
??? 用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息。????
???
??? com.opensymphony.xwork2.ActionChainResult????
???
dispatcher????
???
??? 用来转向页面,通常处理JSP????
???
??? org.apache.struts2.dispatcher.ServletDispatcherResult????
???
freemaker????
???
??? 处理FreeMarker模板????
???
??? org.apache.struts2.views.freemarker.FreemarkerResult????
???
httpheader????
???
??? 控制特殊HTTP行为的结果类型????
???
??? org.apache.struts2.dispatcher.HttpHeaderResult??

stream????
???
??? 向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据????
???
??? org.apache.struts2.dispatcher.StreamResult????
???
velocity????
???
??? 处理Velocity模板????
???
??? org.apache.struts2.dispatcher.VelocityResult????
???
xslt????
???
??? 处理XML/XLST模板????
???
??? org.apache.struts2.views.xslt.XSLTResult????
???
plainText????
???
??? 显示原始文件内容,例如文件源代码????
???
??? org.apache.struts2.dispatcher.PlainTextResult????
???
plaintext????
???
??? 显示原始文件内容,例如文件源代码????
???
??? org.apache.struts2.dispatcher.PlainTextResult

redirect????
???
??? 重定向到一个URL ,被跳转的页面中丢失传递的信息,如request???
???
??? org.apache.struts2.dispatcher.ServletRedirectResult????
???
redirectAction????
???
??? 重定向到一个Action ,跳转的页面中丢失传递的信息,如request??????
???
??? org.apache.struts2.dispatcher.ServletActionRedirectResult????
???
redirect-action????
???
??? 重定向到一个Action ,跳转的页面中丢失传递的信息,如request??????
???
??? org.apache.struts2.dispatcher.ServletActionRedirectResult

注:redirect与redirect-action区别

一、使用redirect需要后缀名 使用redirect-action不需要后缀名?
二、type="redirect" 的值可以转到其它命名空间下的action,而redirect-action只能转到同一命名空下的 action,因此它可以省略.action的后缀直接写action的名称。

如:

<result name="success" type="redirect">viewTask.action</result>?
<result name="success" type="redirect-action">viewTask</result>

附:redirect-action 传递参数

Xml代码
< action?? name = "enterpreinfo"?? class = "preinfoBusinessAction"????? method = "enterPreinfoSub" >????
?? < result?? name = "success"?? type = "redirect -action" >????
???? showpreinfo? preinfo.order_number =${preinfo.order_number}& preinfo.company_name =${preinfo.company_name}????
?? </ result >????
< result?? name = "error"?? type = "redirect " >????
???? < param?? name = "location" > /error.jsp </ param >????
</ result >????
</ action >

?? 因为使用了redirect -action,所以要注意不能将 showpreinf?preinfo.order_number=${preinfo.order_number}写成 showpreinf.action?preinfo.order_number=${preinfo.order_number}

其中${}为EL表达式,获取action:enterpreinfo中属性的值 ; 在这个配置文件里,多个参数的连接符使用了"&",但XML的语法规范,应该使用"&"代替"&",原理和HTML中的转义相同,开始没有注意,在struts 分析配置文件时,总是报出这样的错误:

The reference to entity "preinfo" must end with the ';' delimiter.???
The reference to entity "preinfo" must end with the ';' delimiter.

?

读书人网 >软件架构设计

热点推荐