如何在点击后使用ajax隐藏h:selectOneListbox组件?

时间:2012-08-20 19:43:45

标签: ajax jsf jsf-2

点击<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;
}

1 个答案:

答案 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>中未显示所选项目的问题:)