Struts 2动态地将值设置为静态参数

时间:2013-09-10 03:17:19

标签: struts2 ognl xml-configuration

我想知道,是否可以动态地将值设置为静态参数

<action name="TestApp_*" class="test.TestApp" method="{1}">
   <param name="app_Id">Dynamic value here</param>
   <result name="input">WEB-INF/jsp/test/testView.jsp</result>
</action>

我试过

<action name="TestApp_*" class="test.TestApp" method="{1}">
   <param name="app_Id">${app_Id}</param>
   <result name="input">WEB-INF/jsp/test/testView.jsp</result>
</action>

不工作。它将${app_Id}显示为常规文字。

4 个答案:

答案 0 :(得分:0)

请注意确切的含义。它将${app_Id}显示为常规text.Struts2提供了这种灵活性,您可以动态设置param值。

您只需在动作类中设置这些值,就可以将它们用作占位符。

public class MyAction extends ActionSupport {
   private int app_Id;

   public String execute() {
      // you execute logic

      this.app_Id= 123;
      return SUCCESS;
   }

 // getter and setter for app_Id
}

您可以在结果配置中使用此app_Id

 <action name="TestApp_*" class="test.TestApp" method="{1}">
       <param name="app_Id">${app_Id}</param>
       <result name="input">WEB-INF/jsp/test/testView.jsp</result>
</action>

您可以获得更多详细信息parameters-in-configuration-results

答案 1 :(得分:0)

你可能已经手工编写(错误地)吸气剂,而不是让IDE为你做。

变量app_Id;必须有一个getter getApp_Id(),而你可能有getapp_Id()get_app_Id() ...但是如果你有什么我们应该知道它不发布您的行动代码?!

另外,考虑将变量(从现在开始)更改为尊重约定,希望它们使用camelCased,而不是以下划线分隔...然后appId表示变量,getAppId()表示吸气剂。

答案 2 :(得分:0)

尝试这样做..

<result type="redirect">
    <param name="location">WEB-INF/jsp/test/testView.jsp</param>
    <param name="inputName">app_Id</param>
</result>

在jsp页面中,您可以直接使用此值,如

<s:properties value="app_Id">

试试这个。

答案 3 :(得分:-1)

查看staticParams拦截器。它显示了如何将此拦截器配置为您的操作配置。例如

<action name="someAction" class="com.examples.SomeAction">
    <interceptor-ref name="defaultStack">
         <param name="staticParams.parse">true</param>
         <param name="staticParams.overwrite">false</param>
    </interceptor-ref>
    <param name="num">${numValue}</param>
    <result name="success">good_result.ftl</result>
</action>

这使拦截器能够从动作配置中解析 OGNL表达式的参数值。当然,需要参数值的getter和参数名称的setter来检索参数的实际值。