2009-06-02 34 views
6

Tôi đang cố gắng tạo trang đăng nhập trong Struts. Ý tưởng là để xác nhận nếu người dùng tồn tại, vv, và sau đó nếu có một lỗi, trở về trang đăng nhập với các lỗi màu đỏ (đăng nhập điển hình hoặc bất kỳ xác nhận trang biểu mẫu nào).<html:errors> hướng dẫn thanh chống hoặc ví dụ

Tôi muốn biết nếu ai đó biết hướng dẫn quản lý lỗi trong Struts. Tôi đang tìm kiếm đặc biệt cho một hướng dẫn (hoặc ví dụ) của

<html:errors> 

thẻ, mà tôi nghĩ rằng sẽ giải quyết được vấn đề của tôi.

Trả lời

10

Dưới đây là tóm tắt nhanh. Bạn có một lớp ActionForm, nói MyForm:

<form-bean name="myForm" type="myapp.forms.MyForm"/> 

bạn có một lớp Action, nói MyAction:

<action path="/insert" type="myapp.actions.MyAction" name="myForm" 
    input="/insert.jsp" validate="true" /> 
    <forward name="success" path="/insertDone.jsp"/> 
</action> 

"name" trong hành động đề cập đến "tên" trong form-đậu. Bởi vì bạn có validate="true"ActionForm bạn lớp MyForm phải xác định validate() phương pháp đó sẽ tự động được gọi là:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 
    ActionErrors errors = new ActionErrors(); 
    if ((username==null) || (username.length() < 1)) 
     errors.add("username", new ActionError("error.username.required")); 
    return errors; 
} 

Nếu nó trả về đối tượng một ActionErrors rỗng, Struts tiếp tục gọi MyAction.execute của bạn(). Nếu không, Struts sẽ hiển thị /insert.jsp (vì đó là input = parm mà bạn đã cung cấp) và mở rộng thẻ html.errors để hiển thị các lỗi của bạn từ ActionErrors.

+0

Cảm ơn bạn! Sau nhiều giờ làm việc, tôi cuối cùng cũng có thể xác nhận mẫu của tôi. Cuối cùng, tôi thích xác thực trong bean thay vì trong action và sử dụng validation.xml (cho minlenght, required, etc) và xác nhận cơ sở dữ liệu (người dùng tồn tại, mật khẩu chính xác ...). Điều duy nhất tôi phải thay đổi là sử dụng ".add (String, ActionError)" của ActionErrors vì không được chấp nhận (Struts 1.2.x) và được sử dụng ".add (String, ActionMessage)" vốn giống nhau. Một lần nữa, cảm ơn bạn rất nhiều vì câu trả lời của bạn! – Tere

+0

@Mark Lutton: nếu biểu mẫu được tạo bắt đầu từ một Hành động khác (ví dụ: nhãn/giá trị cho một số nút radio được truy xuất từ ​​DB và đưa vào yêu cầu), làm thế nào các nút radio được hiển thị lại cùng với lỗi (trong trường hợp cần chọn một nút radio)? Tôi không thành công trong việc hiển thị chúng, khi tôi gửi biểu mẫu (chỉ có lỗi được in). – Sefran2

14

Dưới đây là một: //struts.apache.org/1.3.5/struts-taglib/apidocs/org/apache/struts/taglib/html/package-summary.html#package_description

Ở đây tôi m giả Struts 1. tôi không biết nếu nó đã thay đổi cho Struts 2.

bạn có thể đặt một errors.header và errors.footer vào tập tin nguồn lực thông điệp của bạn:

errors.header=<h3><font color="red">Errors:</font></h3><ul> 
errors.footer=</ul> 

Các header và footer được hiển thị chỉ khi đối tượng ActionErrors có bất kỳ lỗi nào trong đó.

Trong lớp hành động của bạn, làm điều này:

ActionErrors errors = new ActionErrors(); 
if (badInput) { 
    errors.add(ActionErrors.GLOBAL_ERROR, 
    new ActionError("error.bad.input", badString); // key in messages resource file 
            // badString will replace {0} in message 
} 

Sau đó, trước khi trở về:

saveErrors(request, errors); 

Trong tập tin tài nguyên thông điệp của bạn:

error.bad.input=<li>Bad input: '{0}' is invalid.</li> 

Bây giờ khi thẻ <html:errors/> được xử lý , nó sẽ chuyển thành:

<h3><font color="red">Errors:</font></h3><ul> 
<li>Bad input: 'xxyyzzz' is invalid.<li> 
</ul> 
+0

Đây chắc chắn là một câu trả lời đầy màu sắc, phải không? Tôi chưa làm chủ được cách định dạng hoạt động ở đây. –

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn! Tôi vẫn đang cố gắng xác nhận (theo sugestiongs của bạn, chúng thực sự tốt! Tôi cần một cái gì đó như thế này, tất cả được giải thích ở cùng một nơi) Tôi sẽ cho bạn biết khi nào nó hoạt động! ;) – Tere

+0

Giải thích tốt nhất về điều này là trong cuốn sách "Khung công tác Struts: Hướng dẫn thực hành cho lập trình viên Java" của Sue Spielman, ISBN 1-55860-862-1. Chương 5. Nó đi từng bước một. –

Các vấn đề liên quan