Struts 2 表单标签中的多个提交按钮
Multiple submit buttons in Struts 2 form tag
我试图将表单标记中的按钮指向与表单不同的 action/action class,但它不起作用。我在另一个线程中读到,这是由于 Struts 2 中的一个错误,应该设置 struts.mapper.action.prefix.enabled"="true"
,所以我做到了,但它仍然是一样的。
我可以使用指向表单正在使用的相同操作 class 的不同方法的不同操作,但是当我尝试指定不同的操作时 class 它不起作用。
这有效,
(jsp)
<s:form action="print">
<s:iterator value="itemList">
<s:radio theme="simple" name="item" list="#{id:name}" />
</s:iterator>
<div id="functionButtons">
<s:submit key="button.submit" />
<s:submit action="cancel" key="button.cancel"/>
</div>
</s:form>
(struts.xml
)
<constant name="struts.mapper.action.prefix.enabled" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
...
<action name="print" class="...PrintItem" method="perform" >
<result name="success">/successJSP.jsp</result>
</action>
<action name="cancel" class="...PrintItem" method="cancel" >
<result name="CANCEL" type="redirectAction">homePage</result>
</action>
(操作)
public class PrintItem extends BaseAction {
@Override
public String perform() throws Exception {
doPrintLogic();
return SUCCESS;
}
public String cancel(){
return "CANCEL";
}
}
但如果我将 struts.xml
中的 "cancel" 动作映射更改为
<action name="cancel" class="...CancelFormAction" method="perform" >
<result name="CANCEL" type="redirectAction">trnsfr</result>
</action>
没有
这正常吗?是否可以从已经映射到一个表单的表单中映射到不同的操作 class?
这是正常的,因为您只能将表单映射到由表单标签的 action 属性指定的一个操作(历史上是 HTML)。提交按钮不会更改该映射,而是调整动作映射器以使用不同的动作,因为前缀已启用。因此,如果您需要更改此行为,您可以动态更改表单映射或更改默认操作映射器等。但是,如果操作实例已经创建,这将是一个问题。因此,您应该使用默认动作映射器。但是你的 post struts.mapper.action.prefix.enabled"="true"
中有一个错字。启用提交按钮操作的常量是
<constant name="struts.mapper.action.prefix.enabled" value="true"/>
或者如果您使用 struts.properties
struts.mapper.action.prefix.enabled=true
我试图将表单标记中的按钮指向与表单不同的 action/action class,但它不起作用。我在另一个线程中读到,这是由于 Struts 2 中的一个错误,应该设置 struts.mapper.action.prefix.enabled"="true"
,所以我做到了,但它仍然是一样的。
我可以使用指向表单正在使用的相同操作 class 的不同方法的不同操作,但是当我尝试指定不同的操作时 class 它不起作用。
这有效,
(jsp)
<s:form action="print">
<s:iterator value="itemList">
<s:radio theme="simple" name="item" list="#{id:name}" />
</s:iterator>
<div id="functionButtons">
<s:submit key="button.submit" />
<s:submit action="cancel" key="button.cancel"/>
</div>
</s:form>
(struts.xml
)
<constant name="struts.mapper.action.prefix.enabled" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
...
<action name="print" class="...PrintItem" method="perform" >
<result name="success">/successJSP.jsp</result>
</action>
<action name="cancel" class="...PrintItem" method="cancel" >
<result name="CANCEL" type="redirectAction">homePage</result>
</action>
(操作)
public class PrintItem extends BaseAction {
@Override
public String perform() throws Exception {
doPrintLogic();
return SUCCESS;
}
public String cancel(){
return "CANCEL";
}
}
但如果我将 struts.xml
中的 "cancel" 动作映射更改为
<action name="cancel" class="...CancelFormAction" method="perform" >
<result name="CANCEL" type="redirectAction">trnsfr</result>
</action>
没有
这正常吗?是否可以从已经映射到一个表单的表单中映射到不同的操作 class?
这是正常的,因为您只能将表单映射到由表单标签的 action 属性指定的一个操作(历史上是 HTML)。提交按钮不会更改该映射,而是调整动作映射器以使用不同的动作,因为前缀已启用。因此,如果您需要更改此行为,您可以动态更改表单映射或更改默认操作映射器等。但是,如果操作实例已经创建,这将是一个问题。因此,您应该使用默认动作映射器。但是你的 post struts.mapper.action.prefix.enabled"="true"
中有一个错字。启用提交按钮操作的常量是
<constant name="struts.mapper.action.prefix.enabled" value="true"/>
或者如果您使用 struts.properties
struts.mapper.action.prefix.enabled=true