【问题标题】:Pass attribute into struts2 action via struts.xml通过 struts.xml 将属性传递给 struts2 动作
【发布时间】:2011-11-06 08:03:58
【问题描述】:

如何将一个属性传递给我的 struts2 java 操作,告诉我该操作是从一个 URL 路径/操作映射还是另一个调用?

我想我可以在 struts.xml 中为两个动作映射添加一些东西,但使用相同的 java 动作,只需将标志传递给动作。

【问题讨论】:

    标签: struts2


    【解决方案1】:

    您需要使用<param/> 标记。我经常为处理添加和编辑实体的操作执行此操作,因为字段、验证等几乎相同。这是一个例子。

    struts.xml

    <action name="users/add" class="AddEditUserAction">
      <param name="edit">false</param>
      <result name="input">/WEB-INF/jsp/addEditUser.jsp</result>
    </action>
    
    <action name="users/{username}/edit" class="AddEditUserAction">
      <param name="edit">true</param>
      <result name="input">/WEB-INF/jsp/addEditUser.jsp</result>
    </action>
    

    行动

    public class AddEditUserAction {
      private boolean isEdit;
    
      // this is called by the struts.xml to set the value
      public void setEdit(final boolean edit) {
        isEdit = edit;
      }
    }
    

    为了使其工作,您需要堆栈中的静态参数拦截器(默认包含它)。

    【讨论】:

    • “方法”方法更短,而 IMO 更直接地交流。
    • 我看不出它会更短。也许您可以扩展您的答案以包含一个示例?
    • 因为method="edit"&lt;param name="edit"&gt;true&lt;/param&gt; 短。不过,对我来说,沟通方面比绝对字符更重要。
    • 字符差异可以忽略不计。由于在这个特定示例中,我使用相同的操作方法来显示添加/编辑表单(输入)、相同的验证方法和处理表单(执行)的相同方法,所以我将坚持我的方法。对于其他情况,您的可能更合适。谢谢!
    • 如果一切都一样,我根本看不出有什么区别。我要说的是,使用 method... 方法读取配置文件时认知开销更少。
    【解决方案2】:

    我质疑设计。

    我会通过在操作配置中为一个或两个映射指定一个方法来处理它。

    方法会在动作中设置一个标志并调用动作的“胆量”,它会查询标志值,并进行相应的处理。

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2014-10-25
      • 1970-01-01
      • 2016-03-23
      • 2016-05-23
      相关资源
      最近更新 更多