2012-03-21 70 views
17

JSF 2チュートリアルの簡単な例を取得しようとしています。Java EE 6:ターゲットに到達できません。識別子 'helloBean'がnullに解決されました。

EclipseでダイナミックWebプロジェクトを使用してGlassfish 3サーバーに公開しています(実行 - >サーバーで実行)。私はこのトピックに関する様々な議論、しかし、解決策は決してを見て持っていた

/index.xhtml @14,48 value="#{helloBean.name}": Target Unreachable, identifier 'helloBean' resolved to null 

:最初のいるindex.xhtmlページがロード正しく、私は管理対象Bean、次のエラーが表示さにアクセスする必要がある場合私にとってはうまくいくようです(beans.xmlの追加、命名規則に従ったマネージドBeanの名前の付与など)。

ご協力いただければ幸いです。

いるindex.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!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:f="http://java.sun.com/jsf/core"  
     xmlns:h="http://java.sun.com/jsf/html"> 

    <h:head> 
     <title>JSF 2.0 Hello World</title> 
    </h:head> 
    <h:body> 
     <h3>JSF 2.0 Hello World Example - hello.xhtml</h3> 
     <h:form> 
      <h:inputText value="#{helloBean.name}"></h:inputText> 
      <h:commandButton value="Welcome Me" action="response"></h:commandButton> 
     </h:form> 
    </h:body> 
</html> 

response.xhtml:

<?xml version="1.0" encoding="UTF-8"?> 
<!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:h="http://java.sun.com/jsf/html"> 

    <h:head> 
     <title>JSF 2.0 Hello World</title> 
    </h:head> 
    <h:body bgcolor="white"> 
     <h3>JSF 2.0 Hello World Example - welcome.xhtml</h3> 
     <h4>Welcome #{helloBean.name}</h4> 
    </h:body> 
</html> 

管理Bean:

package java.hello1; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import java.io.Serializable; 


@ManagedBean 
@SessionScoped 
public class HelloBean implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private String name = "Ricardo"; 

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

ウェブここで

は、私は現在で働いていたコードです.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 

    <display-name>JavaServerFaces</display-name> 

    <!-- Change to "Production" when you are ready to deploy --> 
    <context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
    </context-param> 

    <!-- Welcome page --> 
    <welcome-file-list> 
    <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <!-- JSF mapping --> 
    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <!-- Map these files with JSF --> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 

</web-app> 
+4

もしあなたがmavenを使ってコードを実行しているなら、 'tomcat:run'ではなく' tomcat:run-war'という目標で実行してみてください。この助けを願っています。 :) – huahsin68

+0

@stiv:OPと同じ問題はありません。完全に空白のプレイグラウンドプロジェクトにコードをコピーして、すべてをデフォルトに設定してコピー&ペーストしましたか? – BalusC

+0

Intellij IDEAでプロジェクトを作成しました.JSFのサポートが追加されましたが、Beanを見たくありません。同時に、

答えて

13

JSFにアノテーションを解釈させるには、JSF 2.0準拠の/WEB-INF/faces-config.xmlファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 

    <!-- Config here. Can even be kept empty. --> 

</faces-config> 

あなたが既に持っているか、それが問題を解決しない場合は、警告/エラーが表示されない場合は、サーバーの起動ログに注意してください場合。

ところで、あなたの/WEB-INF/web.xmlファイルは、Servlet 2.5仕様に準拠していると宣言されています。これは必ずしも有害ではないかもしれませんが、サーブレット3.0に準拠したコンテナを使用している場合は意味がありません。次のようにルートの宣言を更新します。

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

    <!-- Config here. --> 

</web-app> 

/WEB-INF/beans.xmlがそのように@Named@InjectなどCDI注釈のためにintentedされます。それを有効にするには、完全に空のファイルで十分です。 @ManagedBean@ManagedPropertyなどのJSFアノテーションとは全く関係がありません。また、混乱したり混ざったりしてはいけません。

10

私はこのような問題に半日悩まされています。私の場合の問題は、EclipseからWebAppを実行した場合にのみ表示されます。 JSF 2は、WEB-INF/classes内で注釈付きBeanを検索し、見つからない。これを解決するために、ビルド出力パスをWebContent/WEB-INF/classesに変更しました。同様のケースの詳細な説明は次のとおりです。Jetty maven goal jetty:run does not work with JSF 2.0 @ManagedBean

+0

これは、ビルドツールおよび/またはサーバープラグインの障害です。 Eclipseはデフォルトのトリム(Mavenやカスタムサーバープラグインなし)で正しく動作します。 mkyongの例を試している人のための – BalusC

+0

(2015年のように)http://www.mkyong.com/jsf2/jsf-2-0-hello-world-example/それは解決策です!! –

0

WARファイルを確認し、クラスがWEB-INF/classesフォルダの下にあるかどうかを確認してください。 同じ問題が発生し、WEB-INF/classesフォルダのクラスファイルがないことがわかりました。

1

OPとまったく同じシナリオ(EclipseでGlassfish 3サーバーに実行 - >サーバーで実行する)では、Eclipseのプロジェクト名からスペースを削除するまで、まったく同じエラーが発生します。スペースを削除するだけで問題を解決しました。

-1

が、私は同じ問題を抱えていた...あなたのコントローラ/ビーンに

+0

これは実際問題のタイトルに記述されているように、問題の可能な回答の1つですが、質問本体自体に記述されているように問題には答えません。 – BalusC

0

を@Named含める、私はすべてを試してみました。その後、「プロジェクトをクリックしてビルド」ボタン、「プロジェクトを作成」ボタンをクリックしてGlassFishサーバーを再起動しました。その後、それは私にとっては今のところ働いています:)

関連する問題