Struts2中的参数在动作之间传递

7

我需要从一个action传递参数到另一个action,例如跟踪一个事件。

最好的方法是什么?

我不想使用会话参数。谢谢。

5个回答

11

假设您在服务器端正在执行某个操作,并希望使用一些参数调用另一个操作。

您可以使用s:action标记调用另一个操作,可能会添加/其他参数而不是原始操作:

    <s:action name="myAction"  ignoreContextParams="true" executeResult="true">
        <s:param name="foo" value="bar"/>
    </s:action>

你也可以使用带有参数的标准struts-xml结果类型:

<result name="success" type="redirect" >
      <param name="location">foo.jsp?foo=${bar}</param>
      <param name="parse">true</param>
      <param name="encode">true</param>
 </result>

如果你想进行客户端重定向,你需要将带有适当参数的url发送回客户端,并可能使用一些javascript代码来执行跳转。

        <s:url action="myAction" >
            <s:param name="foo" value="bar"/>
        </s:url>

我在解决这个问题上遇到了很多麻烦: 在Struts 2.1.8.1中无法正常工作。升级到Struts 2.2.1后一切正常。在任何地方都没有找到关于此的说明。 - grefab

1

你实际上要将一个操作参数值从一个操作传递到另一个操作。

只需包含名称相同的bean变量。你将在接收操作(receiver action)上接收哪个参数。

<action name="ForwardAction" class="...">
       <result name="success" type="chain">ReceiverAction</result>
</action>

ForwardAction参数将被转发到ReceiverAction。您可以使用它。 但是在两个操作中都包含相同的bean名称。

如果您打算在ReceiveAction中接收userid,则应在两个操作中都包含它。

这应该在两个操作中都存在。

private int userid;

public void setUserid(int id){
     this.userid = userid;
}

public int getUserid(){
     return userid;
}

1

在Struts核心标签中使用url标签,示例如下:

                <s:url var="idurl" action="EditEnterprise">
                    <s:param name="enterpriseId">
                        <s:property value="enterpriseId" />
                    </s:param>
                </s:url> 

1
<td>
   <s:url id="url" action="Logging">
      <s:param name="m_userNameInAction"><s:property value="m_userNameInForm"/></s:param>
    </s:url>
    <s:a href="%{url}">English</s:a>
</td>

抱歉?我应该回答吗?请不要垃圾邮件寻找分数。 - JuanDeLosMuertos

0

实际上,在Struts2中可以利用作用域和servletConfig拦截器,自动弹出Action上下文参数(请求/会话等)。


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