1

複数のフォームがあり、それぞれに異なる条件に基づいてレンダリングされたコマンド ボタンが少なくとも 1 つあります<h:selectBooleanCheckbox>。そして、そのデータテーブルの外にコマンドボタンを配置して、ユーザーがチェックボックスを選択して行を選択し、フォームを送信できるようにしました。このタスクを正常に実行できます。

しかし <h:selectBooleanCheckbox>、この特定のフォーム内のコマンド ボタンだけがクリックされたときに必須にする必要があります。しかし、次の方法を実行すると、まったく機能しません。ユーザーがデータテーブル内のチェックボックスを選択せず​​にフォームを送信するときに、チェックボックスを必須にするにはどうすればよいですか?

    < h:form prependId="false" rendered="#{bean.somecondition}">

                    <h:dataTable id="userdata" value="#{bean.list}" var="obj">

                         <h:column>
                                <h:selectBooleanCheckbox required="#{not empty param[commandbutton.clientId]}"
                                                                    requiredMessage="Please select atleast one check box to proceed."
                                                                    value="#{bean.checked[obj.Id]}" />
                       </h:column>

                    </h:dataTable>

                  <h:commandButton value="submit" binding="#{commandbutton}"
                        action="#{bean.someaction}">
                </h:commandButton>

    </h:form>

Javascriptで動作させることができます

           $(function(){
            $('#formId').submit(function(e){
                      var checkboxes = $("input[type='checkbox']");
                     if(!checkboxes.is(":checked")){
                         $('#listcheck').show();   // This is a div contained the validation message.
                          e.preventDefault();
                         }
                     })
               });

でもJSFでやりたい

4

1 に答える 1

3

required="true"そもそもチェックボックスでは機能しません。これは、データ テーブル内にあるかどうか、およびrequired属性が EL 式でハードコードされているか、trueまたは EL 式から来ているかに関係なく、完全に関係ありません。

具体的な原因は、チェックされた値がnever nullであるということです。チェックされていない場合は、単にfalse、notnullまたは空の文字列です。したがって、required="true"チェックを外しても、検証は常にパスします。

JSF ユーティリティ ライブラリOmniFacesは、この問題をすでに特定しておりomnifaces.RequiredCheckboxValidator、まさにその目的のために を提供しています。

特定のケースでは、次のように使用できます。

<h:selectBooleanCheckbox 
    requiredMessage="Please select at least one check box to proceed."
    value="#{bean.checked[obj.Id]}">
    <f:validator 
        validatorId="omnifaces.RequiredCheckboxValidator" 
        disabled="#{empty param[commandbutton.clientId]}" />
</h:selectBooleanCheckbox>
于 2013-09-20T13:44:20.883 に答える