2012-03-08 25 views
6

Có cách nào tôi có thể xác thực văn bản đầu vào jsf chỉ đọc được không nhưng giá trị được thay đổi khi một số sự kiện khác được kích hoạt?jsf (richfaces) xác thực văn bản đầu vào chỉ đọc

+2

Sẽ không dễ dàng hơn khi xác thực nó trong bean sao lưu trang jsf? – Richie

+0

Và làm cách nào để kích hoạt xác thực và phát hành thông báo xác thực? –

+0

Tôi đã thêm câu trả lời làm trả lời nhận xét. Chúc mừng – Richie

Trả lời

2

Tôi đã giải quyết vấn đề này với một giải pháp thay thế. Tôi đã thêm một trường inputHidden rằng có required thuộc tính true đó sẽ không xuất hiện trên giao diện, nhưng sẽ được xác nhận:

<h:inputHidden value="#{bean.value}" required="true" 
        requiredMessage="Data must be entered" /> 

Giá trị của bean.value được thay đổi bởi sự kiện khác, và tại một số reRender trên inputHidden, quá trình xác thực diễn ra.

1

Bạn rất có thể phải tự gọi logic xác thực trực tiếp từ sự kiện của mình. Đây là một mô hình của vòng đời JSF của IBM.

enter image description here

Bạn sẽ nhận thấy rằng quá trình validations giai đoạn xảy ra trước giai đoạn Invoke Application nơi các sự kiện thường được xử lý. Điều này xảy ra tốt sau khi quá trình xác thực sẽ không xảy ra tự động.

2

Trả lời từ nhận xét: "Thật dễ dàng để xác thực nó trong trang sao lưu trang jsf?" Bạn có thể thực hiện xác thực cấp ứng dụng bằng cách nhấp vào nút hoặc một số sự kiện tương tự. Bạn có thể làm một cái gì đó như thế này trong đậu ủng hộ của bạn và liên kết nó với sự kiện này.

public String login(){ 
     FacesContext context = FacesContext.getCurrentInstance(); 
     if(**<<some validation for value in field 'firstName' in form 'userForm'>>**){ 
      FacesMessage message = new FacesMessage(); 
      message.setSeverity(FacesMessage.SEVERITY_ERROR); 
      message.setSummary("Some Valication check"); 
      message.setSummary("Some Valication check!!"); 
      context.addMessage("userForm:firstName", message);//adds validation message for field firstName in form userForm 
      return "ERROR"; 
     } 
     return "SUCCESS"; 
    } 

Hy vọng điều này sẽ hữu ích.

+0

JSF sẽ không cập nhật giá trị mô hình cho đầu vào 'readonly =" true "'. Ngoài ra, làm valdation bên trong một phương thức hành động thay vì bên trong một validator bình thường là một thực hành kém. – BalusC

+0

@BalusC Cảm ơn bạn đã thông tin :) Tôi không biết rằng thiết lập readonly = "true" cho đầu vào sẽ không cập nhật giá trị mô hình. Để thực hiện xác thực bên trong một hành động, tôi biết đó không phải là thực tiễn tốt nhất nhưng tôi nghĩ rằng chúng tôi không thể thêm trình xác nhận hợp lệ cho đầu vào chỉ đọc. – Richie

12

Đặt thuộc tính readonly thành true chỉ trong giai đoạn phản hồi kết xuất. Bằng cách này, nó sẽ không được xem là chỉ đọc trong tất cả các giai đoạn khác so với pha phản hồi kết xuất.

<h:inputText ... readonly="#{facesContext.currentPhaseId.ordinal eq 6}" /> 
+2

Trong trường hợp của tôi '# {facesContext.renderResponse} trả về false khi vẽ HTML (đã in nó ở giữa nó). Dù sao, nó hoạt động như '# {facesContext.currentPhaseId.ordinal eq 6}'. Mojarra 2.1.9. – SJuan76

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