1

私がする時:

<h:form>
    <ui:repeat ...>
        <ui:fragment rendered="#{xyz.type eq 1}"
           <h:inputText value="#{xyz}"/>
        </ui:frament>

        <ui:fragment rendered="#{xyz.type eq 2}"
           <my:component value="#{xyz}"/>
        </ui:frament>
    <ui:repeat />
</h:form>

encodeAll()呼び出されmy:componentず、その後、既存の値は表示されません。

私が次のことをしたら

    <ui:repeat ...>
        <ui:fragment rendered="#{xyz.type eq 1}"
           <h:inputText value="#{xyz}"/>
        </ui:frament>

        <ui:fragment rendered="#{xyz.type eq 2}"
           <h:form>
               <my:component value="#{xyz}"/>
           </h:form>
        </ui:frament>
    <ui:repeat />

もちろん、後者の例は、動的な入力が必要なため、役に立ちません。datepicker、inputtext、...関数などの既存の(デフォルトの)コンポーネントはOKです。既存の値を表示しないのは私のコンポーネントだけです(encodeAllは呼び出されません)。

また、ui:repeatの代わりにh:datatableコンポーネントを試しましたが(理由はわかりません)、同じ結果が得られました。

INFO: Initializing Mojarra 2.1.6 (SNAPSHOT 20111206) for context '/webclient'
INFO: Running on PrimeFaces 3.5
INFO: Running on PrimeFaces Extensions 0.6.3
4

1 に答える 1

4

指定されたコードに基づいて問題を再現することはできませんが、PrimeFacesコンポーネントでラップすると再現できます。たとえば、が(!なしで)<ui:fragment>に置き換えられた場合。これは、PrimeFacesがメソッドを呼び出すのではなく、個別に呼び出すことが原因です。<p:panel>renderedCoreRendererUIComponent#encodeAll()renderChildren()encodeBegin()encodeChildren()encodeEnd()

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

于 2013-03-25T12:40:29.980 に答える