我有一个面板弹出窗口。它应该隐藏在页面加载和点击链接时,它应该显示。我已经编写了以下代码。
<h:panelGroup rendered="#{showTerritoryDropdown}">
<div class="form-row float">
<label for="territory">Territory:</label>
<h:selectOneMenu style="width: 200px" id="territoryDropdownId" styleClass="searchCategory" >
<f:selectItem itemLabel="ALL" itemValue="0" />
<f:selectItem itemLabel="Worldwide" itemValue="1" />
<f:selectItems value="#{reasearchSPTDetailsService.getTerritoryList()}" />
</h:selectOneMenu>
</div>
</h:panelGroup>
我已将showTerritoryDropdown声明为
@Out(required = false)
boolean showTerritoryDropdown = false;
点击链接后,我正在设置showTerritoryDropdown = true;
Bt,即使然后没有显示面板弹出窗口。我认为这是一个错误的错误,但我没有得到,因为我是新编码。请帮助我。
答案 0 :(得分:8)
大多数症状表明您尝试ajax渲染组件并非实际存在于视图中。因此,您得到错误,因为JSF无法知道要更新的内容:当ajax调用完成时,具有指定ID的组件将使用从服务器派生的新组件替换它们。
所以,这不起作用:
<h:panelGroup id="id" rendered="#{bean.rendered}" />
<h:commandButton>
<f:ajax render="id" />
</h:commandButton>
虽然这可以按预期工作:
<h:panelGroup id="id">
<h:panelGroup rendered="#{bean.rendered}" />
</h:panelGroup>
<h:commandButton>
<f:ajax render="id" />
</h:commandButton>
因此,解决方案是将待更新的组件放在视图中始终存在的组件中。