Struts 2中的多个提交按钮表单标记

时间:2015-01-09 21:36:28

标签: java forms jsp struts2 action

我试图将表单标记中的按钮指向与表单不同的操作/操作类,但它不起作用。我在另一个帖子中读到这是由于Struts 2中的一个错误而应该设置struts.mapper.action.prefix.enabled"="true",所以我做了但它仍然是相同的。

我可以使用指向表单所使用的同一个动作类的不同方法的不同动作,但是当我尝试指定不同的动作类时,它不起作用。

这有效,

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

    }
}

但如果我改变了#34;取消&#34; struts.xml

的行动映射
<action name="cancel" class="...CancelFormAction" method="perform" > 
    <result name="CANCEL" type="redirectAction">trnsfr</result>
</action>

它没有

这是正常的吗?是否可以从已映射到其中的表单中映射到不同的操作类?

1 个答案:

答案 0 :(得分:1)

这是正常的,因为您可以将表单映射到表单标记的action属性指定的一个操作(历史记录为HTML)。提交按钮不会更改该映射,而是调整动作映射器以使用不同的操作,因为前缀已启用。因此,如果您需要更改此行为,则可以动态更改表单映射或更改默认操作映射器等。但是,如果已创建操作实例,则会出现问题。因此,您应该使用默认动作映射器。但是你的帖子struts.mapper.action.prefix.enabled"="true"中有一个拼写错误。启用提交按钮操作的常量是

<constant name="struts.mapper.action.prefix.enabled" value="true"/>

或者如果您使用struts.properties

struts.mapper.action.prefix.enabled=true