chain可以把参数传过去
比如第一个action有的方法里有
public String listMenu(){
//获取权限组id
String 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参数了。