1

单击 a 时,我会<h:selectOneListbox>出现一个<h:commandbutton>。当用户从列表框中选择时,我希望所选值出现在 a 中<h:inputText>并隐藏列表框。

<h:selectoneListbox>一旦出现,我就无法停止渲染。该rendered属性在视图首次出现时工作正常,但在我单击列表并调用侦听器后被忽略。

有任何想法吗?

这是小面:

<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;
}
4

1 回答 1

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>:)中的问题

于 2012-08-20T19:52:59.157 回答