3

JSFとajaxに小さな(しかし重大な)問題があります。フォームはこちらです:

 <h:form>
        <h:panelGrid id="pg1" columns="2">

            <h:outputText value="Type: "/>

            <h:selectOneMenu id="selectOne" value="#{personBean.type}">
                <f:selectItems value="#{listBean.personTypes}"/>
                <f:ajax event="valueChange" render="pg2"/>
            </h:selectOneMenu> 

        </h:panelGrid>

        <h:panelGrid id="pg2" columns="2">

            <h:outputText value="Really bad?" rendered="#{personBean.type=='BAD'}"/>

            <h:selectBooleanCheckbox id="checkbox" value="#{personBean.reallyBad}" rendered="#{personBean.type=='BAD'}">
                <f:ajax event="click"/>
            </h:selectBooleanCheckbox>

        </h:panelGrid>

        <h:commandButton value="Ajax Submit" action="#{personBean.printValues}">
            <f:ajax execute="@form"/>
        </h:commandButton>
    </h:form>

PersonBeanは、NICE、BAD、およびreallyBadと呼ばれるブール値の2つの値を持つ列挙型PersonTypeを持つ単純なBeanです。ListBeanは、リスト内の列挙値を返し、selectOneMenuにデータを入力します。

基本的に、BADを選択すると、ブールチェックボックスのパネルがレンダリングされ、チェックボックスをオンにして、人が本当に悪いと言うことができます。その後、必要に応じてフォームを送信できます。問題は、チェックボックスをオンにしてからもう一度NICEを選択すると、チェックボックスがレンダリングされていなくてもチェックボックスがオンのままになることです。したがって、フォームを送信すると、その人はNICEであり、reallyBadである可能性がありますが、これは意味がありません。

チェックボックスをオフにするためにもう一度BADを選択するのではなく、NICEが選択されているときにチェックボックスとその入力値をfalseにリセットする方法はありますか?私はJSFと一緒にajaxするのは少し初心者です!ありがとう。

ps。結果を確認するために、commandButtonsアクションを使用して送信時に2つの入力の値を出力しています...

4

1 に答える 1

1

メニューを変更するときは、チェックボックスを手動でオフにする必要があります。

<f:ajax listener="#{personBean.setReallyBad(false)}" render="pg2" />

ちなみに、<f:ajax event>コードにある両方の値は、すでにデフォルト値です。それらを省略してください。

于 2013-02-26T12:12:41.520 に答える