2010-03-19 33 views
14

Khi đối mặt với vấn đề xác nhận hợp lệ một thuộc tính trong ứng dụng JSF2, có hai cách tiếp cận chính.Xác nhận đậu VS xác thực JSF

Xác định xác nhận trên ManagedBean sử dụng một Chú thích

@ManagedBean 
public class MyBean { 
    @Size(max=8) 
    private String s; 

    // Getters setters and other stuff. 
} 

hoặc tuyên bố nó trên trang JSF:

<h:inputText value="#{myBean.s}"> 
    <f:validateLength maximum="8"/> 
</h:inputText> 

Nó xảy ra mà tôi không thể quyết định cho ai trong số họ. Điều đầu tiên là tốt vì nó loại bỏ một số mã từ các trang jsf (điều này luôn tốt vì các trang đó không thân thiện với định nghĩa) nhưng sẽ khó nhìn thấy 'lướt qua' những gì đang xảy ra với trang khi kiểm tra tệp jsf .

Bạn nghĩ điều nào rõ ràng hơn? Nicer? Tốt hơn?

Trả lời

17

Tôi sẽ bơm để xác thực trên ManagedBean, điều này sẽ loại bỏ logic khỏi JSF VIEW trong bộ điều khiển xem mô hình. và nên giữ cho JSF có trách nhiệm hiển thị Mô hình. Cũng có điều này trên bean được quản lý đảm bảo rằng bao giờ điều này được xác nhận cập nhật được áp dụng. Đây là nhiều DRY (Đừng lặp lại chính mình).

+1

Tuy nhiên trong hầu hết các trường hợp, bạn phải lặp lại trong gui, ví dụ hạn chế chiều dài hoặc kích thước hoặc bất kỳ giá trị trực quan nào khác có cùng giá trị như được sử dụng trong quá trình xác thực. – djmj

+0

@David Waters, cả hai xác thực đậu và xác thực jsf xảy ra trong cùng vòng đời hoặc trong vòng đời khác nhau, ý tôi là xác thực jsf xảy ra trước khi xác thực bean? và xác thực jsf xảy ra ở phía máy khách? –

+0

@MahmoudSaleh - Xin chào Mahmoud, Tôi có thể đề nghị đặt câu hỏi của bạn như một câu hỏi không phải là nhận xét, bạn sẽ nhận được phản hồi và câu trả lời tốt hơn nhiều từ một phạm vi rộng hơn nhiều người. –

3

Richfaces cho phép bạn sử dụng chúng cùng nhau. Xem <rich:graphValidator> (và beanValidator).

Các thẻ này cho biết: "áp dụng xác thực JSF dựa trên các quy tắc javax.validation (hoặc Hibernate validator)".

+0

là cả hai xác nhận đậu và xác nhận jsf xảy ra trong cùng một vòng đời hoặc trong vòng đời khác nhau, tôi có nghĩa là xác nhận jsf xảy ra trước khi xác nhận đậu? và xác thực jsf xảy ra ở phía máy khách? –

4

Có một lợi thế khác của phương pháp managedBean. Nếu thông tin được hiển thị bởi JSF cũng có sẵn thông qua một dịch vụ web (WS) thì mã xác thực thực tế có thể được đưa vào một lớp xác nhận và được sử dụng cho cả JSF và WS đảm bảo rằng tất cả thông tin trong hệ thống là hợp lệ.

0

Tôi có thể thích xác thực JSF vì, tôi không thể cung cấp các thông báo lỗi bó tài nguyên như là một phần của xác thực bean. Ví dụ: bạn không thể làm điều này

@NotNull(message = ResourceBundleHelper.getString("error_message")) 

Bởi vì "Hằng số biên dịch chỉ có thể là nguyên thủy và chuỗi". Có những công việc xung quanh để xác định các thông điệp liên tục nhưng điều đó sẽ trông xấu xí.

1

@ user1730904, bạn có thể xác định thư trong tệp bó tài nguyên như được giải thích trong tài liệu đặc tả Xác thực Bean. Các bước bắt buộc rất đơn giản:

  1. Tạo tệp có tên ValidationMessages_xx_XX.properties trong một số thư mục classpath (ví dụ: src/main/resources/). Nơi xx_XXes_ES, en_US, vv Trường hợp nội dung có thể là: field.message=The number of digits must be less or equal than {max}.
  2. Sau đó, sử dụng giá trị trong chú thích thuộc tính đậu: @Size(max = 20, message="{field.message}")
Các vấn đề liên quan