1

私は PrimeFaces で JSF 2 を使用しています。私の facelet には、ui:param 経由で渡された Bean のメソッドを呼び出す commandLinks (または commandButtons) があります。

私の facelet xhtml はdialogBeanui:param

   <h:panelGroup>

       <p:commandButton
           value="#{msgs.ok}"
           actionListener="#{dialogBean.okClicked}"
           process="#{dialogId}"
           update="#{dialogId}, #{externalIdsToUpdateOnOk}"
           styleClass="dialogBottomBtn"
        />

        <p:commandButton
            value="#{msgs.cancel}"
            actionListener="#{dialogBean.close}"
            process="@this"
            update="#{dialogId}"
            styleClass="dialogBottomBtn"
        />

   </h:panelGroup>

facelet は次のように含まれます。

<ui:include src="/faces/common/dialogButtons.xhtml">
    <ui:param name="dialogId" value="textBlockQuestionDialog" />
    <ui:param name="dialogBean" value="#{formEditor.textBlockQuestionDialog}" />
    <ui:param name="externalIdsToUpdateOnOk" value=":form:tree, :form:properties, :form:preview" />
</ui:include>

次のエラーで失敗します。

javax.el.PropertyNotFoundException: Target Unreachable, 
   identifier 'dialogBean' resolved to null

param として定義された に置き換えてみましたが、何も役に立ちませ んでした#{dialogBean.close}#{dialogBean['close']}#{dialogBean[action]}action

dialogBean および同様h:outputTextの出力で使用すると解決されます。また、この例は に置き換えるactionListenerと機能しactionます。

アイデアはありますか?

4

1 に答える 1

0

私は答えを見つけたと思います。

dialogBeanオブジェクトの actionListener メソッド (okClickedなど) がActionEventパラメーターを受け取ることを再確認してください。

このパラメーターは、渡された Bean には必須のようですがui:param、他には必要ありません。

何が起こっているのかは、次のようなものだと思います。

  1. dialogBeanメソッドのパラメータをチェックokClicked(ActionEvent)
  2. dialogBean見つからない場合は、メソッドで名前が付けられた Bean を探しますokClicked(ActionEvent)
  3. dialogBean見つからない場合は、メソッドで名前が付けられた Bean を探しますokClicked()

ここで、引数なしの方法は、Bean 名が直接一致する場合にのみ使用され、ui:param 参照を介して間接的に一致する場合には使用されません。

于 2012-09-06T21:27:34.997 に答える