Struts 2:Actions之间的参数

8
我有以下问题: 当我完成一个表单并保存表单的值时,我需要传递一个参数(例如ID),这将转发到结果=“成功”,我需要在成功中调用的操作与ID和其他参数一起使用,以便以后在下一个表单中保存这些信息(info-form2和info.form1)...

例如:

FORM1(USER)=====“success”====> FORM2(ADDRESS)

userForm.html===================> addressForm.html?user_id=X ...(其中X:通过UserAction(method:save)传递给AddressAction(method:newAddress)的Id)

请帮忙翻译,谢谢!

提前感谢您的帮助。

3个回答

29
你使用了“forward”这个词,但听起来你想要前往一个新页面(address.html)以收集更多关于地址的信息。如果是这样的话,在用户操作完成后,你需要重定向到地址页面。
<action name="user" class="UserAction">
  <!-- Redirect to another namespace -->
  <!-- for Struts 2.2 --> <result type="redirectAction">
  <!-- for Struts 2.0 <result type="redirect-action"> -->
    <param name="actionName">collect-address</param>
    <param name="userId">${userId}</param>
  </result>
</action>

${userId}语法将调用您的UserAction上的getUserId并将该参数传递,就像您在问题中展示的那样:addressForm.html?user_id=X。collect-address可以有一个成功的结果,转到addressForm.html。这里有文档。 如果您想避免使用另一个操作,可以尝试使用result type="redirect"并通过这种方式传递内容。

如果您真的想要转发,可以使用操作链接。这是Struts2团队的Ted Husted不赞成,但对您可能有用。

不要使用操作链接,尝试将完成此请求的所有代码放入单个操作中,并使用帮助程序或服务类来分离和重用User和Address的代码,而不是"操作链接"。


Barett,我测试了你的解决方案,尝试在书籍和Struts规范中搜索,但没有成功...当我按下“提交”按钮时,用户会被保存到UserAction的“save”方法中,我在“SUCCESS”之前放置了this.id = user.getId();,并且与你上面提到的句子相同,在下一个操作中,参数id出现为空白或者当我使用request.getParameter("id")时它返回null.... :( 你有什么解决我的问题的方法吗?...我会非常感激。 - user95288
另一个我对问题的想法是:我在保存用户对象后才获取id值...这个id是由Hibernate生成的,稍后该对象将拥有生成的id...但我需要将此生成的ID传递给其他操作...但似乎在SAVE方法运行时ID尚未生成...:S ...任何帮助都会让我很高兴! - user95288
我有同样的问题... 当我尝试以这种方式传递变量时,它显示为空或null.. 如果我尝试使用<param name="userId">1111</param>,那么它就可以工作。 - periback2
大家好,感谢点赞。这里的信息不足以更具体地帮助你们... :(最有可能的情况是确保你的UserAction类具有一个“String getUserId()”方法,没有任何重写。 - Barett
事实上,@Barett,这里有更多关于我的问题的信息,以及对我有效的解决方案:https://dev59.com/0WzXa4cB1Zd3GeqPZPDI - periback2

3

您想要做什么不是很清楚。

看起来在成功执行一个操作后,请求会被转发到另一个操作。在第一个操作中,您想要传递参数ID并在第二个操作中使用它。由于两个操作都在同一请求调用中使用,您可以像这样将ID参数保存在请求中:

request.setAttribute("ID", iDValueObject);

在第二个操作中,您可以像这样提取ID的值:

request.getAttribute("ID");


2
如果您正在使用struts2,应该尝试实现ParameterAware并使用它:D - Diego Magalhães

0

这应该可以工作:

  <!--  Package Default -->
    <package name="**default**" extends="struts-default,json-default" namespace="/">
        <action name="noOp" class="com.web.myapp.action.NoOpAction">
           <result name="success" type="chain">
                    <param name="requiresValidation">true</param>
                    <param name="actionName">userAuthentication</param>
                    <param name="namespace">/user</param>
          </result>
        </action>   
    </package>
    <!--  Package User -->
    <package name="user" extends="struts-default,json-default" namespace="/user">
    <action name="userAuthentication" class="com.web.myapp.action.AuthenticateAction">
    ...
    </action>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接