2

ここに、primefacesコマンドボタンのupdate属性に指定された値に関するクエリがあります。

これが簡単なコードです。簡単なxhtmlページがあります

<h:body>
<h:form id="main">
    <p:growl id="maingrowl" showDetail="true"></p:growl>
    <p:panelGrid id="mainpanel" columns="2">

            <p:commandButton value="Ajax Submit" update="test" id="ajax"
                actionListener="#{mytestBean.display}" />


    </p:panelGrid>

    <p:panelGrid id="test" rendered="#{mytestBean.show}" columns="1">
        <h:inputText value="#{mytestBean.val1}" />
        <h:inputText value="#{mytestBean.val2}" />
        <p:commandButton value="value in" id="aj" update="test"
            actionListener="#{mytestBean.displaysec}">
            </p:commandButton>
    </p:panelGrid>

</h:form>
</h:body>

ここで、panelgridの「test」を更新する必要がある場合は、最初のコマンドボタンで、コマンドボタンの更新属性に「:main:」というプレフィックスが付いたID「test」を指定する必要があります。これは、ブラウザのビューソースで見つけたHTMLDOM。しかし、update属性に「test」を指定するだけでも更新できました。したがって、ここでの私の質問は、IDで「:」を使用する必要があるのはいつですか、それとも必須ですか、それとも属性にIDを指定するための事前定義されたルールがありますか?

また、update属性で指定されたIDが、それが配置されているUINamingContainerを介していることも認識しています。些細なことならご容赦ください。ここで本当に混乱しています。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

4

両方のコンポーネント(更新するコンポーネントと更新をトリガーするコンポーネント)が同じNamingContainer内にある場合は、のない相対的なクライアントID:で十分です。

jsfのNamingContainersは、すべての子コンポーネントのクライアントIDの前に独自のIDを付加するすべてのコンポーネントです。たとえば<h:form><h:dataTable>または<ui:repeat>(より正確には、javax.faces.component.NamingContainerインターフェイスを実装するすべてのコンポーネント)。

両方のコンポーネントが同じNamingContainer内にない:場合は、ビュールートからの aで始まる絶対IDを使用する必要があります。

より詳細な情報に興味がある場合は、検索アルゴリズムが説明されているUIComponent#findComponent()メソッドのjavadocを読むことをお勧めします。

:これは、clientIdのセグメントを区切るデフォルトの文字であることに注意してください。のコンテキストパラメータを使用して変更できますweb.xml

于 2012-06-19T10:02:35.813 に答える