ELでマネージドBeanを#{bean.entity.property}
のように参照しようとすると、通常はBeanプロパティを設定するとき、またはBeanアクションを呼び出すときに、javax.el.PropertyNotFoundException: Target Unreachable
例外がスローされることがあります。
5種類のメッセージがあるようです。
彼ら全員はどういう意味ですか?それらはどのようにして引き起こされ、どのように解決されるべきですか?
まだ立ち往生している人のために...
NetBeans 8.1およびGlassFish 4.1をCDIと共に使用しています。何らかの理由で、この問題はローカルサーバーでのみ発生し、リモートサーバーでは発生しませんでした。トリックは何をしました:
- > NetBeansが提供するデフォルトのpomバージョンの代わりにjavaee-web-api 7.0を使用します。これはjavaee-web-api 6.0です。
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
<type>jar</type>
</dependency>
- >このjavaee-web-api-7.0.jarをlibとしてサーバー(domain1フォルダー内のlibフォルダー)にアップロードし、サーバーを再起動します。
私はそれを自分で解決した後にこのエラーについての私の発見を共有することにしました。
まず第一に、BalusCの解決策は真剣に受け止められるべきですが、その場合は特に、Mavenを使用してEnterprise Application Project(EAR)を構築する際に注意すべきもう1つの問題があります。
Netbeansは、親POMファイル、EARプロジェクト、EJBプロジェクト、およびWARプロジェクトを生成します。 GlassFish 4.1には、Netbeans 8.0に組み込まれたGlassFish 4.1を作成するWeld CDIバグがあるため、私のプロジェクトの他のものはすべて問題ありませんでした。 2パッチ以外では使えません。
Solution:
"ターゲットに到達できません。識別子 'bean'はnullに解決されました"エラー - を解決するには
I親POMプロジェクトを右クリックして、Propertiesを選択します。 [プロジェクトのプロパティ]ダイアログが表示されます。[ソース]をクリックすると、 "Source/Binary Format"が1.5に設定され、 "Encoding"がWindows 1250に設定されます。 "Source/Binary Format"をプロジェクトのCDI準拠にしたい方を1.6 0r 1.7に、 "Encoding"をUTF-8に変更してください。
他のすべてのサブプロジェクト(EAR、EJB、WAR)がまだ互換性がない場合は、それらを同じにします。あなたのプロジェクトを実行してください、そして、あなたは二度とそのエラーを受けないでしょう。
私はこれがそこにいる誰かが同じような誤りを持っているのを助けることを願っています。
私は自分の解決策を共有することを決心しました、なぜならここで提供された多くの答えは役に立ちましたが、私はまだこの問題を抱えていたからです。私の場合は、私の新しいプロジェクトにJSF 2.3、jdk10、jee8、cdi 2.0を使用していて、wildfly 12でサーバーを起動し、wildfly Webサイトで推奨されているようにパラメータstandalone.sh -Dee8.preview.mode = trueでサーバーを起動しました。 wildfly 13をダウンロードした後、「beanがnullに解決されました」の問題は解決しました。wildfly 13にまったく同じ戦争をアップロードしてもすべてうまくいきました。
私はjavaeeコンテナにwildfly 10を使っています。 「ターゲットに到達できません。「エンティティ」からnullが返されました」問題が発生しました。 BalusCによる提案をありがとう、しかし解決策のうちの私の問題は説明した。誤って "import com.Sun.istack.logging.Logger;"を使用している「import org.jboss.logging.Logger;」ではなくCDIがJSF ELを実装した。それが解決策の改善に役立つことを願っています。
私の場合の問題は、パラメータを取るコンストラクタを含めましたが、Injectアノテーションを持つ空のコンストラクタを含めなかったことです。
@Inject public VisitorBean() {}
私はコンストラクタなしでそれをテストしたところ、これもうまくいくようです。
1.トピック(ターゲットに到達できません。識別子 'bean'はnullに解決されました);
私は@BalusCと他の共有者の貴重な答えを調べましたが、私のシナリオではこのような問題を超えています。別の名前で新しいxhtmlを作成し、別の名前でBeanクラスを作成した後、コードを新しいBeanクラスと新しいxhtmlファイルに段階的に記述しました(コピーアンドペーストではありません)。
#2に関しては、私の場合ではそれは取り替えの後で魔法のように生き返った
<body>
タグ付け
<h:body>
いくつかの(より単純で、正直に言うと)JSFプロジェクトを実行した後、私は今それを別の設定をすることを思い出すことができませんでした、そして私は初めてこの種のエラーを得ました。私は非常に基本的なログインページ(ユーザー名、パスワード、ユーザーBeanなど)を作成し、いつものようにすべてを設定していました。私が見つけた唯一の違いは前述のタグです。多分誰かがこれが役に立つと思います。
私は同じ問題を抱えていました。解決策ははるかに単純であることがわかりました。データテーブルは、単にsomeMethod()ではなく、getterの形式のメソッド、つまりgetSomeMethod()を望んでいるようです。私のデータテーブルでは、findResultsを呼び出していました。バッキングBeanのメソッドをgetFindResults()に変更しましたが、動作しました。
CommandButtonはgetを使わずにfindを使っていましたが、getはそれをもっと混乱させるだけでした。
私の場合は、@Named( "beanName")のスペルミスをコミットしました。それは "beanName"と想定されていましたが、たとえば "beanNam"と書きました。