2011-12-14 9 views
5

Tôi sử dụng JSF 2.0, hibernate-validator4.2.jar xác nhận-api.jar tomcat và Eclipse.Tại sao <f: validateBean /> không hoạt động?

tôi đặt @Size(min=3, message="xxx") chú thích trong một @ManagedBean và <f:validateBean /> giữa <h:inputText value="#{user.name}"></h:inputText>

Khi tôi cố gắng để chạy các dự án tôi nhận được lỗi này ...

exception 

javax.servlet.ServletException: Expression Error: Named Object: javax.faces.Bean not found. 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) 

root cause 

javax.faces.FacesException: Expression Error: Named Object: javax.faces.Bean not found. 
    com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:1593) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.createValidator(ValidatorTagHandlerDelegateImpl.java:244) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyAttachedObject(ValidatorTagHandlerDelegateImpl.java:132) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyNested(ValidatorTagHandlerDelegateImpl.java:211) 
    com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.apply(ValidatorTagHandlerDelegateImpl.java:87) 
    javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) 
    javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) 

tại sao? (Điều này chỉ xuất hiện khi tôi đặt thẻ)

User.java

import java.io.Serializable; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.validation.constraints.Size; 

@ManagedBean(name="user") 
@SessionScoped 
public class User{ 
    @Size(min=3, message="At least 3 characters!") 
    private String name; 


    public String getName() { 
     return nume; 
    } 
     public void setName(String name){ 
       this.name=name; 
    } 

} 

adduser.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 

<ui:composition template="/templates/master_layout.xhtml"> 
    <ui:define name="text_header" >Panou de control: Adauga user </ui:define> 
    <ui:define name="content"> 
     <h:panelGrid columns="3"> 
      <h:outputText value="Name"></h:outputText> 
      <h:inputText value="#{user.name}"> 
       <f:validateBean /> 
      </h:inputText> 

      <h:commandButton value="Inregistreaza" action="index.xhtml"></h:commandButton> 
     </h:panelGrid> 
    </ui:define> 
</ui:composition> 
</html> 

Trả lời

5

Nó sẽ làm việc hoàn toàn tốt đẹp, mặc dù trống <f:validateBean/> thẻ là hoàn toàn không cần thiết trong bối cảnh này . Nó được coi là được sử dụng để xác nhận "finetune" nhiều hơn, chẳng hạn như nhóm xác nhận hợp lệ và/hoặc vô hiệu xác thực bean ngầm trên cơ sở mỗi đầu vào bằng cách chỉ định các thuộc tính thẻ mong muốn. Tuy nhiên, bạn không có thuộc tính nào trên thẻ đó, vì vậy, chỉ cần xóa thẻ đó hoàn toàn. Trên thiết lập dự án JSF 2 + JSR 303 mặc định, nó được cho là khởi động hoàn toàn trong suốt mà không cần thêm nhiều thẻ JSF bất cứ khi nào có chú thích JSR 303 trên thuộc tính chẳng hạn như @Size và thích.

Nhưng tôi không nghĩ rằng việc xóa thẻ sẽ giải quyết ngoại lệ cụ thể này. Vấn đề của bạn nằm sâu hơn. Trình xác thực này được cho là tự động đăng ký khi khởi động. Tuy nhiên, ngoại lệ về cơ bản nói rằng trình duyệt tính hợp lệ chưa được đăng ký. Với thông tin được đưa ra cho đến nay, không thể đưa ra câu trả lời được nhắm mục tiêu. Tôi có thể nghĩ ra các nguyên nhân sau có thể:

  1. Có lỗi trong triển khai JSF mà bạn đang sử dụng. Nâng cấp nó lên phiên bản mới hơn.
  2. Bạn có nhiều thư viện JSF phiên bản khác nhau trong đường dẫn lớp của bạn. Dọn dẹp nó.
  3. Khai báo gốc faces-config.xml không được khai báo tuân theo JSF 2.x. Sửa nó.
+0

Vấn đề là triển khai JSF. Tôi đã tải xuống một phiên bản khác và hiện hoạt động tốt. Cảm ơn rất nhiều. Chúc một ngày tốt lành :) –

+0

Bạn được chào đón. Nhưng đối với các hồ sơ (và tò mò của tôi) mà thực hiện/phiên bản bạn đã ban đầu có và mà bạn có bây giờ? – BalusC

+0

Tôi đã sử dụng 2.1.4. Bây giờ 2.0.6 –