result配置的各种视图转发类型
Strust2中的几种转发类型
dispatcher(默认)、redirect、redirectAction、plainText
<result type="redirect">/xxx.jsp</result>
■<------------redirect--------->
【ognl表达式】
<action name="redirect" class="struts2.demo.action.DemoAction"> <result type="redirect">/target.jsp?uid=${uid}</result> </action>
可以采用ognl表达式访问action中的属性
package struts2.demo.action; public class DemoAction{ private String uid; public void setUid(String uid){ this.uid=uid; } public String getUid(){ return this.uid; } public String execute(){ this.setUid("ABC"); return "success"; } }
这样重定向之后的页面路径为
http://127.0.0.1:8080/Struts2/target.jsp?uid=ABC
注意:如果要传递中文则需要编码
URLEncoder.encode("中文","utf-8");
在jsp页面上可以采用${param.uid}来获取参数值 如果值为中文需要转码
URLDecoder.decode(new String(request.getParameter("uid").getBytes("ISO-8859-1"),"utf-8"),"utf-8");
■<------------redirectAction--------->
<action name="redirect" class="struts2.demo.action.DemoAction"> <result type="redirectAction"> helloworld </result> </action>
如果要重定向到其他命名空间下的action则需要采用param属性
<package name="pack1" namespace="/demo" extends="struts-default"> <action name="helloworld" class="struts2.demo.action.HelloWorldAction"> <result>/WEB-INF/hello.jsp </result> </action> </package> <package name="pack2" namespace="/demo" extends="struts-default"> <action name="redirect" class="struts2.demo.action.DemoAction"> <result type="redirectAction"> <param name="actionName">helloworld</param> <param name="namespace">/demo</param> </result> </action> </package>
■<------------plainText--------->
原样显示视图的源代码
如果要显示中文则需要注入一下编码类型
<result type="plainText"> <param name="location">helloworld</param> <param name="charSet">utf-8</param> </result>
■配置共用视图
<package name="pack1" namespace="/demo" extends="struts-default"> <global-results> <result name="head">/WEB-INF/skin/head.jsp</result> </global-results> <action name="helloworld" class="struts2.demo.action.HelloWorldAction"> <result>/WEB-INF/hello.jsp</result> </action> </package>
public class HelloWorldAction{ public String execute(){ return "head"; } }
此处配置的global-results只可以在当前包中共用 如果想要所有包共用可以将其放入一个base包中 然后让所有package继承这个base包