h:面板组无法正确呈现

时间:2013-11-17 06:13:57

标签: jsf seam

我有一个面板弹出窗口。它应该隐藏在页面加载和点击链接时,它应该显示。我已经编写了以下代码。

<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,即使然后没有显示面板弹出窗口。我认为这是一个错误的错误,但我没有得到,因为我是新编码。请帮助我。

1 个答案:

答案 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>

因此,解决方案是将待更新的组件放在视图中始终存在的组件中。