SoloTerran 发表于 2013-2-6 10:08:57

关于chain,redirect和redirectAction

自己在实践的时候发现了一些问题,比如:需要将表单中的数据封装在User中,提交给firstAction处理,再将处理后的user传递给secondAction作处理。
表单如下:<s:form action="firstAction">    <s:textfield name="user.name" label="name" />    <s:password name="user.password" label="password" />    <s:submit /></s:form>
UserAction.java代码如下:
package st.action;import com.opensymphony.xwork2.Action;import st.bean.User;public class UserAction {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String firstAction() {user.setName(user.getName() + "_FIRST");user.setPassword(user.getPassword() + "_FIRST");System.out.println(user.getName() + "," + user.getPassword());System.out.println(this + "," + user);return Action.SUCCESS;}public String secondAction() {user.setName(user.getName() + "_SECOND");user.setPassword(user.getPassword() + "_SECOND");System.out.println(user.getName() + "," + user.getPassword());System.out.println(this + "," + user);return Action.SUCCESS;}}
起先我是使用redirectAction,配置如下:
<action name="firstAction" class="st.action.UserAction" method="firstAction">    <result name="success" type="redirectAction">      <param name="actionName">secondAction</param>      <param name="user.name">${user.name}</param>      <param name="user.password">${user.password}</param>    </result></action><action name="secondAction" class="st.action.UserAction" method="secondAction">    <result>result.jsp</result></action>
通过打印出来的结果,可以发现虽然user的值被传递给了secondAction,但其实是重新实例化了一个user。如果要做到传递对象貌似没有什么办法,而且参数内容也被显示在了地址栏上。
使用redirect也是同样的问题。
如果使用chain又是另外一回事儿了:
<action name="firstAction" class="st.action.UserAction" method="firstAction">    <result name="success" type="chain">secondAction</result></action><action name="secondAction" class="st.action.UserAction" method="secondAction">    <result>result.jsp</result></action>
结果,前一次user处理后的值并没有传给secondAction,secondAction只是处理表单上的数据。
如果想要完成user对象在action中的传递,难道一定要借助session么?
页: [1]
查看完整版本: 关于chain,redirect和redirectAction