2010-03-22 29 views
6

tôi đang học JSF và đi qua dòng này:<h:messages> làm gì trong JSF?

<h:messages layout="table"></h:messages> 

trong một ứng dụng mẫu?

Bạn không chắc chắn dòng này làm gì? Tôi nhận được không có lỗi khi loại bỏ các dòng từ mã, và tôi có thể chạy nó và nhận được cùng một đầu ra?

+0

Dòng tôi đi qua trong mã mẫu: bibek

+0

Tôi đã chỉnh sửa câu hỏi của bạn. Sử dụng phím tắt Ctrl + K để viết mã trong câu hỏi/câu trả lời. – romaintaz

+0

@romaintaz cảm ơn – bibek

Trả lời

17

Thẻ h:messages hiển thị tất cả thư cho chế độ xem JSF hiện tại không được bao gồm bởi một h:message (nhận xét thẻ 's' ở cuối) bị thiếu. Tin nhắn có thể được tạo ra một cách rõ ràng bởi các bean sao lưu của bạn (FacesContext.addMessage) hoặc ngầm bởi JSF.

Ví dụ: nếu bạn đã đánh dấu giá trị đầu vào theo yêu cầu và người dùng gửi biểu mẫu mà không điền vào giá trị bắt buộc, thông báo lỗi sẽ được thêm vào chế độ xem. Nếu thẻ h:message bị ràng buộc với thành phần có liên quan, thông báo sẽ được hiển thị ở đó, nếu không nó sẽ được hiển thị bởi thẻ h:messages chung trong chế độ xem của bạn (nếu có).

Thuộc tính layout chỉ định mã HTML sẽ được tạo ra như thế nào. Bố cục table (được sử dụng trong ví dụ của bạn) sử dụng bảng HTML để hiển thị thông báo, trong khi bố cục list sử dụng danh sách có dấu đầu dòng (HTML ul thẻ).

Nếu bạn làm không chỉ định thẻ h:messages trong chế độ xem của bạn và cũng không có thẻ h:message, người dùng sẽ không được thông báo về lỗi. Do đó, cách tốt nhất là bao gồm thẻ h:message cho mỗi thành phần đầu vào của chế độ xem của bạn và thẻ h:messages cho toàn bộ chế độ xem của bạn để đảm bảo rằng tất cả thư đều hiển thị với người dùng.

Bạn sẽ tìm thấy tham chiếu thẻ JSF nhỏ gọn tại JSF Toolbox.

+4

Liên quan đến "hiển thị tất cả thư cho chế độ xem JSF hiện tại không được đề cập". Tôi không nghĩ điều đó hoàn toàn chính xác. Nó sẽ hiển thị tất cả các tin nhắn ngoại trừ khi bạn chỉ định globalOnly = "true". –

5

Các thành phần <h:message><h:messages> được dành riêng để hiển thị thông báo cho người dùng (thường là thông báo lỗi). Ví dụ: khi bạn có xác thực trên trường không thành công (ví dụ: người dùng không điền vào trường bắt buộc hoặc nhập chuỗi trong trường chỉ số), thì FacesMessage được thêm vào FacesContext vật. Sau đó, <h:message><h:messages> được sử dụng để hiển thị thông báo trong trang.

Thành phần <h:messages> sẽ hiển thị tất cả các thư có trong FacesContext, trong khi <h:message> được dành riêng cho một clientId cụ thể (một trường cụ thể). Sau này là hữu ích khi bạn muốn đặt tin nhắn gần với một lĩnh vực ví dụ.

Lưu ý rằng bạn có thể thêm bất kỳ loại thông điệp rằng sẽ hiển thị cho người dùng:

FacesContext.getInstance().addMessage(null, new FacesMessage("The message to display")); 

Trong ví dụ này, các tham số đầu tiên là trường ID của lĩnh vực được quan tâm bằng tin nhắn này (hữu ích khi tin nhắn là một thông báo xác thực cho một trường cụ thể). null có nghĩa là thông báo là thông tin chung (tức là không được liên kết với bất kỳ trường cụ thể nào).

Bạn có thể xem ví dụ về thành phần này here. Lưu ý rằng ví dụ này sử dụng các rich:messages đó là một phần mở rộng (được cung cấp bởi RichFaces) của "cơ bản" <h:message/>, nhưng nguyên tắc là như nhau.