У вас есть одна форма и несколько кнопок отправки. Проблема в том, что форма может быть отправлена только для одного действия, независимо от того, сколько кнопок отправки у вас есть внутри формы.
Сразу приходят на ум три решения:
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. Измените атрибут действия HTML-формы с помощью JavaScript перед отправкой формы. Сначала вы меняете кнопки отправки на обычные с прикрепленными обработчиками кликов:
<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
(один класс Action, аналогичный пункту 1), но без необходимости проверять, какая кнопка была нажата, поскольку это обрабатывается классом DispatchAction
.
Вы просто предоставляете три метода выполнения с правильными именами delete
, edit
и update
. Вот пример, объясняющий, как вы можете это сделать а>.
В заключение: Что касается № 1, мне не очень нравятся эти уродливые тесты…. Что касается № 2, мне не очень нравится тот факт, что вам приходится играть с формой действия с помощью JavaScript. , так что лично я выбрал бы номер 3.
person
Community
schedule
12.09.2011