3

我的要求是这样的:我有一个文本输入,每当发生值更改事件时,都必须填充一个多选列表框。如果没有找到匹配的记录,则必须显示文本输入而不是多选列表框。

    <h:column>
<h:selectManyListbox size="3" value="#{hostInfoBean.gateKeeperendPointReference}" rendered="#{hostInfoBean.selectManyRendered}"                             id="gateKeeperendPointReference">
<f:selectItems value="#{hostInfoBean.gateKeeperendPointReferenceItems}" />
</h:selectManyListbox>
<h:inputText id="gateKeeperendPointReferenceText" size="30" rendered="#{!hostInfoBean.selectManyRendered}">
</h:inputText>
</h:column>

我还使用 a4j 作为值更改侦听器,

<a4j:support event="onchange"                   reRender="hostInfo:gateKeeperendPointReference" focus="GFacPath"
                    ajaxSingle="true" />

'selectManyRendered' 是我在 JAVA bean 中确定的布尔值。该程序仅适用于布尔变量的默认值。如果在运行时更改了布尔值,则 selectManyListbox 和 inputText 的可见性之间的切换不起作用。请帮助解决这个问题。我错过了什么吗?

问候, 苏雷什

4

1 回答 1

4

如果“rendered”属性解析为 false,则该组件不在您的树中,并且无法作为“rerender”目标找到。当您有条件渲染的组件时,您希望将它们包装在始终可用作目标的组件中,如下所示:

<h:inputText value="#{myBean.text}" >
  <a4j:support event="onkeyup" reRender="listZone" ajaxSingle="true" />
</h:inputText>
<h:panelGroup id="listZone">
  <h:selectManyListbox value="#{myBean.list}" rendered="#{myBean.renderList}" >
    <f:selectItems value="#{myBean.listItems}" />
  </h:selectManyListbox>
  <h:inputText size="30" rendered="#{!myBean.renderList}/>
<h:panelGroup id="listZone">
于 2010-07-08T18:47:49.320 回答