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