点击<h:selectOneListbox>
后会显示<h:commandbutton>
。当用户从列表框中选择时,我希望所选值显示在<h:inputText>
中并隐藏列表框。
<h:selectoneListbox>
一旦出现就无法停止渲染。 rendered
属性在视图首次出现时正常工作,但在单击列表并调用侦听器后会被忽略。
有什么想法吗?
这是Facelet:
<h:panelGroup>
<h:inputText id="TitleText" value="#{bindingScheduleHandler.title}"/>
<h:commandButton value="Clients" actionListener= #bindingScheduleHandler.clientList}" />
<h:selectOneListbox id="listBox" value="#{bindingScheduleHandler.clients}" size="5"
rendered="#{bindingScheduleHandler.showClients}">
<f:selectItems value="#{bindingScheduleHandler.clientLabelsValues}" />
<f:ajax event="click" listener="#{bindingScheduleHandler.clickListener}"
render="TitleText" />
</h:selectOneListbox>
</h:panelGroup>
这是支持bean:
public void clickListener(AjaxBehaviorEvent event) {
this.title = clients;
showClients = false;
renderClientList = false;
}
答案 0 :(得分:0)
在<f:ajax render>
中,您不能引用由JSF有条件地呈现的组件。相反,您需要引用始终呈现的父组件。简单的解释是<f:ajax>
正在使用JavaScript来更新由JSF组件表示的HTML元素的内容(节点值)。无法显示/隐藏HTML元素本身。
只需更新父组件即可。
<h:panelGroup id="group">
<h:inputText id="TitleText" value="#{bindingScheduleHandler.title}"/>
<h:commandButton value="Clients" actionListener= #bindingScheduleHandler.clientList}" />
<h:selectOneListbox id="listBox" value="#{bindingScheduleHandler.clients}" size="5"
rendered="#{bindingScheduleHandler.showClients}">
<f:selectItems value="#{bindingScheduleHandler.clientLabelsValues}" />
<f:ajax event="click" listener="#{bindingScheduleHandler.clickListener}"
render="group" />
</h:selectOneListbox>
</h:panelGroup>
顺便说一下,这也会立即解决<h:inputText>
中未显示所选项目的问题:)