3

Balusc の inputDate コンポーネントをテストしました: PrimeFaces ダイアログ内に複数の入力フィールドを持つ複合コンポーネント。encodeAllメソッドはまったく呼び出されず、選択ボックスは初期化されません。複合コンポーネントは、記事に示されているようにフォームに配置すると正常に動作します。

encodeAllダイアログ内で機能しないのはなぜですか?どうすれば修正できますか?

編集1

Mojarra 2.1.13 と PrimeFaces 3.4.2 を使用しています。

EDIT 2 これは私の実際のプロジェクトのサンプルです。あなたのコンポーネントを使用して、複合コンポーネントについて学びました。データテーブルとツールバーを備えたビュー アカウントがあります。[追加] を押すと、カスタム ウィザードのダイアログが開きます。ダイアログには独自のフォームがありますが、ウィザードは表示されません。

accounts.xhtml

<h:form id="form">
    <ui:include src="/WEB-INF/flows/accounts/accountsTable.xhtml" />    
</h:form>
<ui:include src="/WEB-INF/flows/accounts/mainDialog4.xhtml" />  

accountsTable.xhtml

<p:dataTable id="accounts" ... />  

<p:toolbar>
    <p:toolbarGroup align="left">
        <p:commandButton value="Add"
            action="#{accountsBean.initializeEntity}"
            process="@this" update=":actionsDialog4"
            oncomplete="actionsDialogWidget4.show()">
            <f:setPropertyActionListener value="#{2}"
                target="#{accountsBean.operation}" />
            <f:setPropertyActionListener value="accountsBean"
                target="#{sessionScope.beanName}" />
        </p:commandButton>
    </p:toolbarGroup>
 </p:toolbar>

mainDialog4.xhtml

<p:dialog id="actionsDialog4" widgetVar="actionsDialogWidget4" dynamic="true"
    modal="true">       
    <h:form>
    <costom:actionWizard name="wizard" widgetVar="wiz" bean="#{accountsBean}" header="#{accountsBean.entityHeader}" />
    </h:form>
</p:dialog>
4

1 に答える 1

3

これは、PrimeFacesがメソッドではなく、個別にCoreRenderer呼び出していることが原因です。そのため、PrimeFaces コンポーネントの直接の子として宣言されている場合は常に失敗しますが、標準の JSF コンポーネントの直接の子として宣言されている場合は機能します。UIComponent#encodeAll()renderChildren()encodeBegin()encodeChildren()encodeEnd()

encodeBegin()の代わりに でジョブを実行するとencodeAll()、動作するはずです。それに応じて、複合コンポーネントの記事を更新しました。

これとは無関係ですが、 に<p:dialog>は独自の形式が必要です。

于 2013-03-25T12:45:59.367 に答える