【发布时间】:2011-11-06 08:03:58
【问题描述】:
如何将一个属性传递给我的 struts2 java 操作,告诉我该操作是从一个 URL 路径/操作映射还是另一个调用?
我想我可以在 struts.xml 中为两个动作映射添加一些东西,但使用相同的 java 动作,只需将标志传递给动作。
【问题讨论】:
标签: struts2
如何将一个属性传递给我的 struts2 java 操作,告诉我该操作是从一个 URL 路径/操作映射还是另一个调用?
我想我可以在 struts.xml 中为两个动作映射添加一些东西,但使用相同的 java 动作,只需将标志传递给动作。
【问题讨论】:
标签: struts2
您需要使用<param/> 标记。我经常为处理添加和编辑实体的操作执行此操作,因为字段、验证等几乎相同。这是一个例子。
<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;
}
}
为了使其工作,您需要堆栈中的静态参数拦截器(默认包含它)。
【讨论】:
method="edit" 比<param name="edit">true</param> 短。不过,对我来说,沟通方面比绝对字符更重要。
我质疑设计。
我会通过在操作配置中为一个或两个映射指定一个方法来处理它。
方法会在动作中设置一个标志并调用动作的“胆量”,它会查询标志值,并进行相应的处理。
【讨论】: