4

ページの部分ビューにアクション パラメータを渡そうとしていますがnull、外部ページで使用されているのは Bean であるにもかかわらず、何らかの理由でパラメータが であると表示されます。

ページ:

<ui:include src="/templates/common/ajaxConfirmPopup.xhtml">
    <ui:param name="bean" value="#{paginaBean}" />
    <ui:param name="action" value="deleteAll" />
</ui:include>

パーシャルでアクションを呼び出す:

actionListener="#{bean[action]}"

しかし、次の例外が発生します。

Caused by: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bean' resolved to null
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:98) [jbossweb-7.0.13.Final.jar:]
    at org.apache.el.parser.AstValue.invoke(AstValue.java:244) [jbossweb-7.0.13.Final.jar:]
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]

私は何か間違ったことをしていますか?

注:メソッドにパラメーターがある場合はすべて正常に機能しActionEventますが、メソッドにパラメーターがない場合は機能しません。

4

1 に答える 1

5

actionListenerこの問題は、次のように常に引数なしで EL 2.2 構文でメソッドを宣言した場合に説明できます。

actionListener="#{bean.method()}"

これは確かに引数のないメソッドを期待しています。ただし、標準のJSF の方法は次のとおりです。

actionListener="#{bean.method}"

ActionEventこれは本当に引数を期待しています。あなたの質問履歴は確かに、EL 2.2 構文を常に使用していたことを示唆しているため、それが「標準」であると想定していましたが、それは真実ではありません。

actionListenerを使用したアプローチのように、インクルード テンプレートのメソッドをパラメーター化するとactionListener="#{bean[action]}"actionListenerメソッドは次のように解釈されます。

actionListener="#{bean.method}"

したがって、ActionEvent引数が必要です。

これを修正するには、基本的に 3 つのオプションがあります。

  1. ActionEventメソッドに引数を指定してください、言い訳はできません。

  2. actionListenerで置き換えactionます。メソッドはそのままで問題ありませんvoid。たとえば、Eclipse EL の検証がぎくしゃくする場合は、設定で調子を整えるだけです。

  3. EL 2.2 構文を so のように使用しますactionListener="#{bean[action]()}"。ただし、これは初期の Tomcat および Glassfish バージョンでは失敗します。

以下も参照してください。

于 2013-03-28T14:19:37.960 に答える