2011-12-14 22 views
5

私は、JSF 2.0、hibernate-validator4.2.jar validation-api.jar tomcatとEclipseを使用します。<f:validateBean />はなぜ機能しませんか?

私はこのエラーを取得するプロジェクトを実行しようとすると、私は...

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) 

理由を@ManagedBeanで@Size(min=3, message="xxx")注釈を入れて、<f:validateBean />

<h:inputText value="#{user.name}"></h:inputText>の間に?空 <f:validateBean/>タグは、この文脈では全く不必要であるが、それは、完全に正常に動作する必要があり

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> 

答えて

5

(これは私がタグを入れたときに表示されます) 。これは、検証のグルーピングや暗黙のBean検証の無効化などの検証を、入力ごとに望みのタグ属性を指定することによって、より詳細に「精緻化」するために使用されることになっています。ただし、そのタグには属性はありませんので、そのタグを完全に削除してください。デフォルトのJSF 2 + JSR 303プロジェクト設定では、@SizeなどのJSR 303アノテーションがある場合はいつでも、JSFタグを追加することなく、完全に透過的に処理されます。

しかし、私はタグを削除するとこの特定の例外が解決されるとは思いません。あなたの問題はこのように深いです。このバリデータは、起動時に自動登録されるはずです。ただし、例外は基本的にバリデーターがまったく登録されていないことを示します。これまでの情報では、目標とする回答をすることはできません。次のような原因が考えられます。

  1. 使用しているJSF実装にバグがあります。新しいバージョンにアップグレードしてください。
  2. クラスパスに異なるバージョンの複数のJSFライブラリがあります。それをクリーンアップします。
  3. faces-config.xmlルート宣言がJSF 2.xに準拠していると宣言されていません。修理する。
+0

問題はJSFの実装でした。別のバージョンをダウンロードしてうまくいきました。どうもありがとう。素敵な一日を過ごしてください:) –

+0

よろしくお願いします。しかし、あなたが元々持っていた実装/バージョンの記録(そして私の好奇心)のために、あなたは今持っていますか? – BalusC

+0

私は2.1.4を使用していました。 Now 2.0.6 –

関連する問題