struts2一个action返回到另一个action的特定result

来源:互联网 发布:胡歌的演技知乎 编辑:程序博客网 时间:2024/04/29 21:33

问题:

<action name="admin" class="">
<result name=""></result>
<result name=""></result>
<result name=""></result>
</action>

<action name="detail" class="admin.DetailAction">
<result name="detail">这里怎么返回到admin的特定的一个方法(admin除默认方法外,还有几个方法)</result>
</action>


解决方法:


1.
Struts2中从一个Action直接跳到另一个Action中,Struts提供了两种结果类型可以实现:chain、redirect。我们从Servlet中学到重定向是不能保留参数的,也就是说重定向了,request对象就会无效了。同样redirect就像Servlet中的重定向,它也不能够保留request对象保存的参数。但是chain可以。所以两种的区别就在于chain能够保留request对象,而redirect不可以。struts.xml的配置<package name="mystruts1" extends="struts-default" namespace="/mystruts1">      <!-- 第一个Action -->      <action name="test_*" class="com.action.TestAction" method="{1}">          <result name="text_chain" type="chain">result_resultChain</result>          <result name="text_redirect" type="redirect">result_resultRedirect</result>      </action>            <!-- 第二个Action -->      <action name="result_*"  class="com.action.ResultAction" method="{1}"></action>  </package> public class TestAction {      public String testChain(){          HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);          request.setAttribute("param", "我是chain结果类型...");          return "text_chain";      }            public String testRedirect(){          HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);          request.setAttribute("param", "我是redirect结果类型...");          return "text_redirect";      }  }public class ResultAction {    public String resultChain(){          HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);          System.out.println(request.getAttribute("param"));          return null;      } public String resultRedirect(){          HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);          System.out.println(request.getAttribute("param"));          return null;      }  }
2.

一般是一个方法对应一个action name.用method属性表示每个方法的名字,然后前面的action name 起不同的名字。举个例子:
<action name="A" class="admin.UserAction" method="方法名1">
<result>....</result>
</action>
<action name="B" class="admin.UserAction" method="方法名2">
<result>....</result>
</action>
这就是你说的“admin除默认方法外,还有几个方法”,将那几个方法都这么配置。
然后
<action name="detail" class="admin.DetailAction">
<result type="redirect">/B.action</result>
</action>
这里是转到了方法名2里,根据不同的方法名选择不同的action name 进行配置,如果还有配置文件中还有package名,前面还需要假如package名。
<result type="redirect">/包名/B.action</result>



0 0