1

2 セットのパネル グループがあります。1 つのパネル グループにはフィールドセットが含まれ、内部には 2 つのラジオ ボタンと 1 つのコマンド ボタンが含まれています。しかし、問題は、コマンド ボタンがクリックされたときにラジオ ボタンを選択した後で、最初にページがロードされたときに他のパネル グループがまったくレンダリングされないことです。リフレッシュすると、すべて正常に動作します。コマンドアクションで設定されていても、renderedPanelGroup 値が true に設定されていない理由を理解できませんでした。これが私のコードです。

test.xhtml

    <h:form id="parentformid">
 <h:panelGroup id="demandDashBoardPanelGroupID">
    <fieldset> 
    <legend>Demand Dashboard</legend>

     <table>
        <tr>
        <td> 
            <h:selectOneRadio id="groupbyid" value="#{demandManagedBean.selectedRadioButton}" >  
                    <f:selectItem itemLabel="Group By Creation Date Time" itemValue="1" />  
                    <f:selectItem itemLabel="Group By Location" itemValue="2" />
            </h:selectOneRadio>
        </td>
        <td>
            <h:commandButton id="fetchbuttonID" value="Fetch" 
                     action="#{demandManagedBean.displayDemandRequestsTable}">
                          <f:ajax render=":parentformid:demandrequestpanelgrpid"execute="@form" /> 
            </h:commandButton>
        </td>
        </tr>
        </table>

     </fieldset>

     </h:panelGroup>
   //For checking demandManagedBean.renderedPanelGroup value. it is giving always false.Thats why panel group is not getting rendered.
   <h:outputText value="#{demandManagedBean.renderedPanelGroup}" />

    <h:panelGroup id="demandrequestpanelgrpid" rendered="#{demandManagedBean.renderedPanelGroup}"> 

     <fieldset id="demandrequestfieldsetid"> 

     <legend >Demand Requests</legend>

            <h:outputText rendered="#{demandManagedBean.renderFirstTable}" value="first table"/>

            <h:outputText rendered="#{demandManagedBean.renderSecondTable}" value="second table"/>

     </fieldset> 

   </h:panelGroup>

//バッキング Bean コマンド アクション

private String selectedRadioButton ="1";
private boolean renderFirstTable ;
private boolean renderSecondTable;
private boolean renderedPanelGroup ;

//getter and setter methods

public void displayDemandRequestsTable(){


        if(selectedRadioButton!= null && selectedRadioButton.endsWith("1")){

            renderFirstTable = true;
            renderSecondTable= false;

        }else if(selectedRadioButton!= null && selectedRadioButton.endsWith("2")){

            renderFirstTable = false;
            renderSecondTable= true;

        }
        renderedPanelGroup = true;
    }
4

1 に答える 1

4

render されていない要素を更新することはできません。 render=false は、DOM Tree から要素を削除するための JSF の方法です。

css display:none や visibility:hidden とは異なります <- この 2 つは DOM ツリー内の要素を保持しますが、非表示にしますが、JSF render=false は DOM ツリー内の要素をレンダリング (保持) することさえしません (表示されることさえありません)ページの「ソースを表示」で)

したがって、あなたの場合、 panelGroup を別の「panelGroup」でラップし、ラッパーのIDを更新する必要があります

<h:panelGroup id="demandrequestpanelgrpid">
    <h:panelGroup rendered="#{demandManagedBean.renderedPanelGroup}"> 

. . .

同様の質問も見てください

h:outputLabel を ap:ajax リスナーから更新できますか?

于 2012-05-22T18:21:30.883 に答える