2

私は属性を持つ2つp:ouputPanelsを持っていrenderedます。基になる値が変更されたときにレンダリングする必要がありますgetter/setter。ただし、基になる値は正しい順序で変更されます。最初のパネルは消えますが、2 番目のパネルは表示されません。HTMLコードではありません!

私の2つのパネル:

    <p:outputPanel id="PanelParent">

     <h:form>
        <p:outputPanel id="PanelForm" rendered="#{PageService.isVisibilityForm()}">

        <h:commandButton value="Button"
                                            action="#{PageService.persist}"
                                            styleClass="btn btn-primary opal_btn submit_form_new" />
     </h:form>                      
        </p:outputPanel>

        <p:outputPanel id="PanelMessage" rendered="#{PageService.isVisibilityMessage()}">

        //Message

        </p:outputPanel>

    </p:outputPanel>

あなたの答えに感謝します!!!

-アップデート-

コードでは persist メソッドを参照しており、このメソッドでは各セクションの可視性の getter と setter を変更しています。

-UPDATE1-

OKここに実際に私のコードがあります:

            <p:outputPanel id="parentPanel">
                <p:outputPanel id="PanelForm"
                    rendered="#{PageService.isVisibilityForm()}">
                    <div>
                        <div>
                            <h:form class="homepage_invitee_form" action="" method="POST">

                                <p:messages id="messages" showDetail="false" autoUpdate="true"
                                    closable="true" />

                                <h:inputText required="true"
                                    value="#{PageService.instance.name}"
                                    name="name" placeholder="Last Name"
                                    styleClass="lastname_new" id="lastname_new"
                                    type="text placeholder" />

                                <h:commandButton value="Press"
                                    action="#{PageService.persist()}"/>

                                    <f:ajax render="" />
                                </h:commandButton>

                            </h:form>
                        </div>

                    </div>
                </p:outputPanel>

                <p:outputPanel id="PanelThank"
                    rendered="#{PageService.isVisibilityThank()}">
                    <div>
                        Message
                    </div>
                </p:outputPanel>
            </p:outputPanel>

私は本当にそれがどこに失敗したのかわかりませんか?;(

4

2 に答える 2

3

Xtreme Biker が<f:ajax> render属性が DOM に既に存在する要素をレンダリングすると述べたようです。あなたの場合、<p:outputPanel id="PanelThank"> render属性は評価されfalseていたので、DOM にはありませんでした。したがって、<f:ajax>レンダリングできませんでした。常に見えるものを指す必要があります。変化する

<f:ajax render="" />

<f:ajax render=":PanelThank" />

しかし、もっと重要な変更

<p:outputPanel id="PanelThank" rendered="#{PageService.isVisibilityThank()}">
    <div>
        Message
    </div>
</p:outputPanel>

<p:outputPanel id="PanelThank">
    <p:outputPanel rendered="#{PageService.isVisibilityThank()}">
        <div>
            Message
        </div>
    </p:outputPanel>           
</p:outputPanel>

コードのリファクタリングも検討してください。たとえば、actionand methodin<h:form>は必要ありません。

于 2013-07-19T14:10:26.033 に答える
1

rendered属性は、JSF がコンポーネントを DOM ツリーにレンダリングするかどうかを定義します。あなたの問題は、ツリーにないコンポーネントを単に持っていないため、更新できないことです。

<p:outputPanel id="PanelForm" rendered="#{PageService.isVisibilityForm()}">
    //my Form
<p:outputPanel>

<!--Fails if not PageService.isVisibilityForm(), because you don't have the component itself in the tree! So can't find it-->
<p:ajax update="PanelForm"/>

あなたの最善は、コンテンツを常にレンダリングされる別のコンテナーにラップし、他のコンテナーの代わりに更新することです。

<h:panelGroup id="updatablePanel">
    <p:outputPanel rendered="#{PageService.isVisibilityForm()}">
        //my Form
    <p:outputPanel>
</h:panelGroup>

<p:ajax update="updatablePanel"/>
于 2013-07-19T12:11:16.677 に答える