2011-09-12 55 views
5

Tôi có mã này trong JSP của tôi:Nhiều nút Submit trong Struts 1.3

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%> 
.. 
.. 
<html:form action="update" > 
    .. 
    .. 
    <html:submit value="delete" /> 
    <html:submit value="edit" /> 
    <html:sumit value="update" /> 
</html:form> 

Và đây trong file struts-config.xml:

<action path="/delete" name="currentTimeForm" input="/viewall.jsp" type="com.action.DeleteProduct"> 
    <forward name="success" path="/viewall.jsp" /> 
    <forward name="failure" path="/viewall.jsp" /> 
</action> 

Giống như hành động delete, tôi có editupdate. Nó hoạt động tốt, nếu tôi cung cấp cho tên cụ thể như <html:form action="delete"> nhưng, làm thế nào để làm cho nó tự động làm việc cho updateedit?

Trả lời

18

Bạn có một biểu mẫu và nhiều nút gửi. Vấn đề là một biểu mẫu chỉ có thể gửi cho một hành động, bất kể có bao nhiêu nút gửi bạn có trong biểu mẫu.

Ba giải pháp đến tâm ngay bây giờ:

1. Có chỉ là một hành động mà bạn gửi tất cả mọi thứ. Khi đã ở trong lớp Hành động, hãy kiểm tra nút nào đã được sử dụng để gửi biểu mẫu và thực hiện điều trị thích hợp dựa trên điều đó.

<html:form action="modify"> 
    .. 
    .. 
    <html:submit value="delete"/> 
    <html:submit value="edit" /> 
    <html:sumit value="update" > 
</html:form> 

Trong phương pháp ModifyAction.execute(...) có cái gì đó như:

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. Có thuộc tính action của form HTML thay đổi sử dụng JavaScript trước khi nộp mẫu đơn. Trước tiên, bạn thay đổi nộp nút cho những người đơn giản với bộ xử lý nhấp chuột kèm theo:

Với bộ xử lý:

function submitTheForm(theNewAction) { 
    var theForm = ... // get your form here, normally: document.forms[0] 
    theForm.action = theNewAction; 
    theForm.submit(); 
} 

3. Dùng (lớp một hành động tương tự để chỉ 1) DispatchAction nhưng không cần phải kiểm tra xem nút nào đã được nhấp vì được xử lý bởi DispatchAction.

Bạn chỉ cần cung cấp ba phương thức thực thi đúng tên là delete, editupdate. Here is an example that explains how you might do it.

Kết luận: Đối với số 1, tôi không thực sự thích những thử nghiệm xấu xí này .... cho số 2, tôi thực sự không thích thực tế là bạn phải chơi với biểu mẫu hành động sử dụng JavaScript, vì vậy tôi sẽ cá nhân để tìm số 3.

+0

Cảm ơn bạn rất nhiều .... Hãy để tôi thử ... – Nageswaran

+2

hướng dẫn thực sự tốt đẹp được đưa ra bởi bạn - +1 – Naved

+0

Wow. Chính xác những gì tôi cần. Cảm ơn nhiều! – ykombinator

0

Có một cách khác đơn giản hơn để làm điều này như sau:

Trong ActionForm currentTimeForm, thêm một tài sản String (ví dụ: buttonClicked).

Trong jsp, trong mỗi thẻ html: submit sẽ thêm thuộc tính này.

Bây giờ trong phương thức thực hiện hành động, chỉ cần kiểm tra giá trị của thuộc tính này, ví dụ:

if(currentTimeForm.getButtonClicked().equals("delete"){ 
} 
else if((currentTimeForm.getButtonClicked().equals("edit")) 

v.v ...

+0

tôi xem đây là cách không hiệu quả để thực hiện việc này. Với 10 hình thức ví dụ có các nút trình đôi hoặc ba, bạn không thể tiếp tục thêm phiên hoặc yêu cầu biến hoặc thêm các biến khác vào bean của bạn. –