h:面板组无法正确呈现

San*_*jay 0 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>
Run Code Online (Sandbox Code Playgroud)

我已将showTerritoryDropdown声明为

@Out(required = false)
boolean showTerritoryDropdown = false;
Run Code Online (Sandbox Code Playgroud)

点击链接,我设置showTerritoryDropdown = true;Bt即使然后没有显示面板弹出窗口.我认为这是错误的错误,但我没有得到,因为我是新编码.请帮助我.

sku*_*sel 8

大多数症状表明您尝试ajax渲染视图中不存在的组件.因此,您得到错误,因为JSF无法知道要更新的内容:当ajax调用完成时,具有指定ID的组件将使用从服务器派生的新组件替换它们.

所以,这不起作用:

<h:panelGroup id="id" rendered="#{bean.rendered}" />
<h:commandButton>
    <f:ajax render="id" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

虽然这将按预期工作:

<h:panelGroup id="id">
    <h:panelGroup rendered="#{bean.rendered}" />
</h:panelGroup>
<h:commandButton>
    <f:ajax render="id" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

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