您有一个表单和多个提交按钮。问题是一个表单只能提交一个动作,无论表单中有多少个提交按钮。
现在想到了三个解决方案:
1.只需一个操作即可提交所有内容。进入 Action 类后,检查用于提交表单的按钮并据此执行适当的处理。
<html:form action="modify">
..
..
<html:submit value="delete"/>
<html:submit value="edit" />
<html:sumit value="update" >
</html:form>
在ModifyAction.execute(...) 方法中有类似的内容:
if (request.getParameter("delete") != null || request.getParameter("delete.x") != null) {
//... delete stuff
} else if (request.getParameter("edit") != null || request.getParameter("edit.x") != null) {
//...edit stuff
} else if (request.getParameter("update") != null || request.getParameter("update.x") != null) {
//... update stuff
}
2. 在提交表单之前使用 JavaScript 更改 HTML 表单的 action 属性。您首先将提交按钮更改为附加点击处理程序的普通按钮:
<html:form action="whatever">
..
..
<html:button value="delete" onclick="submitTheForm('delete.do')" />
<html:button value="edit" onclick="submitTheForm('edit.do')" />
<html:button value="update" onclick="submitTheForm('update.do')" />
</html:form>
使用处理程序:
function submitTheForm(theNewAction) {
var theForm = ... // get your form here, normally: document.forms[0]
theForm.action = theNewAction;
theForm.submit();
}
3. 使用DispatchAction(类似于第1 点的一个Action 类),但无需测试点击了哪个按钮,因为DispatchAction 处理了该按钮。
您只需提供三个正确命名为delete、edit 和update 的执行方法。 Here is an example that explains how you might do it.
结论:对于第 1 条,我真的不喜欢那些丑陋的测试....对于第 2 条,我不太喜欢你必须玩动作的事实表单使用 JavaScript,所以我个人会选择 3 号。