如何在 struts 中调用与执行不同的方法?

How to call different method from execute in struts?

在我的 Struts 应用程序中,我有一个名为 Foo 的操作。

    <action name="Foo" class="some.path.here.foo">
        <result name="SUCCESS" type="tiles">/foo.tiles</result>
    </action> 

通常它会调用 execute(),但我想调用另一个名为 change() 的方法。我该怎么做?

我的想法是这样的:

    <form name="Foo" action="Foo" >
        <s:textfield name="Mail" placeholder="Mail" />
        <select name="someselect">
        <s:iterator value="someblabla">
            <option value="<s:property value="somevalue"/>" label="<s:property value="Description"/>"><s:property value="Name"/></option>
        </s:iterator>
        </select>
        <s:submit method="change" value="Go!"></s:submit>
    </form>

但是当我想这样做时,我得到

HTTP Status 404 - No result defined for action some.path.is.here.Foo and result input

你能帮帮我吗?

执行是动作中的默认方法。如果您想更改它,我认为您可以通过添加 "method" 属性来修改您的操作描述。像这样:

<action name="Foo" class="some.path.here.foo" method="change">
        <result name="SUCCESS" type="tiles">/foo.tiles</result>
</action> 

希望对您有所帮助

您收到错误是因为,除非您明确指定,否则 struts 需要 'execute' 方法。如果您的操作方法名称不同,则必须使用参数 'method'.

明确指定它

所以你的代码应该是

<action name="Foo" class="some.path.here.foo" method="change">
        <result name="SUCCESS" type="tiles">/foo.tiles</result>
</action> 

Struts2还支持通配符方法和动态方法调用。 DMI 不太安全,并且不是首选。请参阅文档 here