2009-09-01 26 views
6

Tôi làm việc với một nhà phát triển front-end, người viết các tệp JSP. Chúng tôi có một biểu mẫu hoạt động chính xác, ngoại trừ các lỗi xác thực/ràng buộc/xử lý dường như không thể hiển thị với thẻ <form:errors/> của Spring.Spring MVC <form: errors /> tag không tìm thấy thông báo lỗi

Tôi đã xác nhận rằng lỗi đang được đặt và đường dẫn chính xác cho lỗi là gì. Giả sử <form:errors path="*" /> sẽ hiển thị tất cả, bất kể đường dẫn, nhưng nó không hiển thị gì.

Tôi có cần truy cập nguồn thư viện thẻ để suy luận xem có vấn đề gì không?

+1

Bạn có chắc chắn mã xác nhận đã thiết lập các lỗi không? Bạn có thể vui lòng dán một số mã? –

+0

Tôi đã thiết lập các điểm ngắt trong mã xác nhận, và showForm() trong SimpleFormController, và tôi thấy tất cả các lỗi ở đó. ModelAndView lá showForm với các lỗi bao gồm. Nhưng trong jsp, biểu mẫu: thẻ lỗi hiển thị không có gì bị ràng buộc, nhưng dữ liệu mô hình khác được hiển thị chính xác. Tôi đặt một breakpoint trong ErrorsTag.shouldRender và nó luôn trả về false, với getBindStatus() không tìm thấy đối tượng đích nào. Tôi không biết làm thế nào tôi có thể đăng bất kỳ mã nào, vì điều này được nhúng trong một hệ thống lớn. Tôi biết nếu tôi xây dựng một ví dụ nó sẽ hoạt động hoàn hảo. :/ – Mojo

Trả lời

14

Câu trả lời đơn giản: < biểu mẫu: lỗi /> phải ở trong một biểu mẫu <: biểu mẫu /> phần tử để liên kết với đối tượng "lệnh" của mô hình.

16

2 điều tôi đã khám phá.

1) chắc chắn rằng bạn chỉ định tên của form-đậu đối tượng/lệnh theo hình thức thẻ

<form:form method="post" enctype="multipart/form-data" commandName="salesOrder"> 

2) chắc chắn rằng bạn đặt tên cho form-đậu/đối tượng lệnh của bạn bằng tên lớp của nó. Trong ví dụ trên, lớp của tôi là com.abc.xyz.SalesOrder. Nếu tôi gọi nó là "như vậy" hoặc "đặt hàng" trong mô hình thì nó sẽ không hiển thị lỗi.

+3

+1 cho điểm (2). Thực sự phản trực giác! Cảm ơn! – weekens

+0

Điểm thứ hai rất lạ nhưng nó hoạt động – gstackoverflow

1

Không biết tôi có gặp vấn đề tương tự hay không. Vấn đề của tôi là tôi đặt giá trị sai cho @ModelAttribute. Có giá trị được đặt thành commandName của biểu mẫu <: biểu mẫu/> hoạt động tốt.

2

Đây chỉ là vì lợi ích của hậu thế, thấy rằng câu trả lời đã được chấp nhận. Tôi cũng có cùng các triệu chứng, nhưng vấn đề đối với tôi là biểu mẫu: giá trị thuộc tính phương thức biểu mẫu phân biệt chữ hoa chữ thường: tức là method = "post" sẽ không hiển thị lỗi, trong khi method = "POST" sẽ hoạt động tốt. Lưu ý cụ thể ở đây là mọi thứ hoạt động như mong đợi - Dạng xem biểu mẫu được hiển thị như mong đợi vì xác thực đã thất bại EXCEPT rằng các lỗi không hiển thị trong JSP cuối cùng.

Hành vi này sẽ tồn tại trên bất kỳ bộ điều khiển mở rộng AbstractFormController, vì

protected boolean isFormSubmission(HttpServletRequest request) 

hiện một "POST" Equals thay vì "POST" .equalsIgnoreCase.

3

Câu hỏi - Tại sao? "Hình thức: đường dẫn lỗi =" xyzProperty" không in lỗi trên jsp

Anserwer -

  1. BindingResult không có tài sản objectName mà liên kết với danh sách các lỗi với CommandName trong jsp của bạn:

  2. Defualt objectName = Tên đối tượng của bạn, ví dụ: nếu tên lớp là MyCareerFB thì objectName = myCareerFB. Ký tự đầu tiên trong trường hợp nhỏ, nó tuân theo quy ước đặt tên bean là

  3. Giữ giá trị commandName trong jsp giống như objectName, lỗi khác sẽ không bị ràng buộc với đối tượng và jsp sẽ không bao giờ in thông báo lỗi.

0

Bạn có thể chưa sử dụng quy ước đặt tên phù hợp cho thuộc tính biểu mẫu commandName. Đó là vấn đề tôi gặp phải.Tôi đã có một lớp có tên là "XYZTask" và tôi đặt tên là commandName = "xyztask". Tất cả ánh xạ biểu mẫu đã hoạt động trừ khi tôi không thấy các lỗi được báo cáo bởi thẻ. Tôi đổi tên lớp của tôi thành "XyzTask" và biểu mẫu commandName = "xyzTask" và các lỗi bắt đầu hoạt động.

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