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