单击命令按钮操作后,PanelGroup未呈现

时间:2012-05-22 18:12:59

标签: jsf-2

我有两组面板组。一个面板组包含一个字段集和内部,两个单选按钮和一个命令按钮。根据选择的单选按钮,通过ajax调用,相应的值将显示在另一个面板组中。但问题是在单击命令按钮时选择单选按钮后,在第一次加载页面时,其他面板组完全没有呈现。当我刷新一切正常。我无法弄清楚为什么即使在命令操作中设置了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>

// Backing bean cmd action

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;
    }

1 个答案:

答案 0 :(得分:4)

你无法更新未渲染的元素,render = false“是一种JSF方式来”从DOM树中删除元素,

它不像css display:none或visibility:hidden&lt; - 这两个将保留DOM树中的元素但隐藏,而JSF呈现= false甚至不会渲染(保留)DOM树中的元素(你甚至不会在页面的“查看源”中看到它)

所以在你的情况下你需要用另一个`panelGroup'包装panelGroup并更新包装器的id

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

。 。

也看一下类似的问题

Can you update an h:outputLabel from a p:ajax listener?