struts2 result chain 和redirectAction区别

来源:互联网 发布:2007詹姆斯数据 编辑:程序博客网 时间:2024/05/01 13:34

chain可以把参数传过去

比如第一个action有的方法里有

public String listMenu(){//获取权限组idString roleId=request.getParameter("roleId");}


那么

<result name="updateMenu" type="chain">            <param name="actionName">sysRoleAction_listMenu</param></result>

 

再次调用listMenu()这个方法中的String roleId=request.getParameter("roleId");还可以得到roleId的值,就算是不同的action也可以得到,说明roleId这个参数一直在action中传递着。

而如果换成redirectAction则不会得到roleId的值了,说明redirectAction不会传递参数。

也就是说如果想要转到另一个action的方法时,还需要得到之前那个action里面的参数(比如request里面的参数),就用chain

转向的方法不需要之前action里面的参数,则用redirectAction。

举个chain的例子

先看一下struts.xml的配置

 <!-- 处理菜单权限 -->         <result name="listMenu">/WEB-INF/page/sys/role/menu/view.jsp</result>         <!--转发到action -->         <result name="updateMenu" type="chain">            <param name="actionName">sysRoleAction_listMenu</param>            <param name="namespace">/sys</param>         </result>   

然后用转向sysRoleAction_updateMenu,并且传入传入roleId参数

 <s:form name="ActionForm" method="post" action="sysRoleAction_updateMenu.do" namespace="/sys"><s:hidden name="roleId"  value="%{#request.sysRole.id}"></s:hidden>
public String updateMenu(){  String roleId=request.getParameter("roleId");return "updateMenu";}

 然后转到sysRoleAction_listMenu,在listmenu()方法中仍然能接受roleId参数,说明参数通过chain传过去了

public String listMenu(){  //获取权限组id  String roleId=request.getParameter("roleId");如果换用redirectAction则listMenu()无法接受ids参数了。