Struts 2:Actions之间的参数

时间:2009-04-24 04:29:04

标签: java java-ee parameters struts2 struts-action

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

例如:

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

userForm.html ===================> addressForm.html?user_id = X ...(其中X:Id将UserAction抛出(方法:保存)传递给AddressAction(方法:newAddress))

我将非常感谢您的帮助

提前致谢

3 个答案:

答案 0 :(得分:29)

您使用了“转发”这个词,但听起来您想要转到新页面(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。 Docs here.如果您想避免使用其他操作,可以尝试using the result type="redirect"并通过该方式传递内容。

如果您真的想转发,可以使用action chaining。这是discouraged by Ted Husted on the Struts2 team,但它可能适合您。

而不是动作链接,尝试将所有代码完成此请求到单个操作中,并使用帮助器或服务类为User和Address分离和重用代码而不是“action chaining”。

答案 1 :(得分:3)

不太清楚你想做什么。

在成功执行某个操作后,请求会转发到另一个操作。在第一个操作中,您希望传递参数ID并在第二个操作中使用它。由于这两个操作都在同一个请求调用中使用,因此您可以将ID参数保存在请求中,如此

request.setAttribute(“ID”,iDValueObject);

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

request.getAttribute( “ID”);

答案 2 :(得分: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>