【问题标题】:Dynamically set value to static parameter in Struts 2在 Struts 2 中动态设置静态参数的值
【发布时间】:2013-09-10 03:17:19
【问题描述】:

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

<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} 显示为常规文本。

【问题讨论】:

  • “显示为常规文本”是什么意思?

标签: java parameters struts2 ognl xml-configuration


【解决方案1】:

请注意确切的含义,它将${app_Id} 显示为常规文本。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

【讨论】:

  • 但还是这样。当我尝试为其设置值但没有用时,它不起作用。 “作为常规文本”表示 显示 '${app_Id}'
  • 我不确定你想在这里做什么?如果您想在 jsp &lt;s:property value="app_id"&gt; 中查看该值,则应显示该值
  • 好的,让我解释一下。通常在结果中定义参数工作正常。我想做的是为这个动作定义动态全局参数。
  • 定义“全局”。 that Action 的所有方法都是全局的?
  • @StormRider:你能按照 Andrea 的要求定义全局的含义吗
【解决方案2】:

您可能已经(错误地)手动编写了 getter,而不是让 IDE 为您完成。

变量app_Id; 必须有一个getter getApp_Id(),而你可以有类似getapp_Id()get_app_Id()... 但是如果你不发布你的Action 代码我们怎么知道呢? !

另外,考虑更改您的变量(从现在开始)以遵守约定,即希望它们使用驼峰式大小写,而不是下划线分隔...然后 appId 用于变量,getAppId() 用于吸气剂。

【讨论】:

  • 我确实使用 IDE 来生成 getter/setter。
  • 请发布 Java 部分
【解决方案3】:

试着用这种方式做..

<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">

试试这个。

【讨论】:

    【解决方案4】:

    看看staticParams interceptor

    此拦截器使用动作配置中定义的静态参数填充动作。如果动作实现Parameterizable,静态参数的映射也将直接传递给动作。静态参数将添加到请求参数映射中,除非 merge 设置为 false

    参数通常使用struts.xml 中的&lt;param&gt; 元素定义。

    它显示了如何将此拦截器配置到您的操作配置中。

    例如:

    <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表达式的参数值。

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 2016-06-24
      • 2016-06-12
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2013-07-24
      相关资源
      最近更新 更多