动态更改JSF组件的可见性

时间:2010-07-08 15:19:53

标签: jsf javabeans ajax4jsf

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

    <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的可见性之间的切换不起作用。请帮忙解决这个问题。我错过了什么吗?

的问候, 苏雷什

1 个答案:

答案 0 :(得分: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">
相关问题