1

をクリック<h:selectOneListbox>すると表示される<h:commandbutton>があります。ユーザーがリストボックスから選択すると、選択した値がリストボックスに表示され、<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 に答える