0

jsf に 1 つの数値バリデーターと 1 つのチェックボックスがあります。チェックボックスが選択されている場合、数値バリデーターは検証をチェックします。チェックボックスが選択されていない場合、検証はそれをスキップします。

私のコードを見てください

<h:outputText value="#{trancheResources.label_enable}:" />
<p:selectBooleanCheckbox id="enableCheckBox" itemLabel="#{trancheResources.label_yes}" value="#{trancheBean.enableCheck}" disabled="#{trancheBean.readonly}">

</p:selectBooleanCheckbox>

<p:outputLabel for="acceptableMinVal" value="#{trancheResources.label_acceptableMinVal}:" />
<pe:inputNumber id="acceptableMinVal" value="#{trancheBean.trancheValidation.podMin}" disabled="#{trancheBean.readonly}" maxValue="999"
                required="#{trancheBean.requiredIfEnableCheck}" requiredMessage="#{trancheResources.label_acceptableMinVal} is required.">
    <f:validateDoubleRange disabled="#{trancheBean.cValidation}" minimum="1.00" />
</pe:inputNumber>

<p:outputLabel for="acceptableMaxVal" value="#{trancheResources.label_acceptableMaxVal}:" />
<pe:inputNumber id="acceptableMaxVal" value="#{trancheBean.trancheValidation.podMax}" disabled="#{trancheBean.readonly}" maxValue="999"
                required="#{trancheBean.requiredIfEnableCheck}" requiredMessage="#{trancheResources.label_acceptableMaxVal} is required.">
    <p:ajax event="keyup"  listener="#{trancheBean.acceptableMaxValOnkeyup}" ></p:ajax>
</pe:inputNumber>

<p:outputLabel for="exceptionMinVal" value="#{trancheResources.label_exceptionMinVal}:" />
<pe:inputNumber id="exceptionMinVal" value="#{trancheBean.trancheValidation.podExceptionMin}" disabled="#{trancheBean.readonly}" maxValue="999"/>

<p:outputLabel for="exceptionMaxVal" value="#{trancheResources.label_exceptionMaxVal}:" />
<pe:inputNumber id="exceptionMaxVal" value="#{trancheBean.trancheValidation.podExceptionMax}" disabled="#{trancheBean.readonly}" maxValue="999"/>

解決策を教えてください。これを解決する方法がわかりません。

4

1 に答える 1

0

このサンプルの回答を提供します。それを使用して、自分の回答に適用できます。このアプローチは、Pankaj Kathiriya のコメントに基づいています。

以下のサンプル コードには、2 つのコンポーネントがあります<h:inputText>(このコンポーネントを yours に置き換えます<pe:inputNumber>)。をオン/オフするたびrenderedに属性値が変わります<p:selectBooleanCheckBox>。が にrendered評価されるtrueと、<h:inputText>検証ありが表示され、検証なしは消えます (逆も同様です)。

は、チェック/チェックを外すたび<selectBooleanCheckBox>に発火します。また、最初に (1 フェーズ前に) 処理できるようにValueChangeEvent、必ず に設定する必要がありimmediateます。true次に、リスナーを呼び出しrenderResponseて、残りのライフサイクルをスキップします。<h:inputText>そうしないと with validationの検証が開始され、切り替えが発生したときに検証エラー メッセージが表示されます。最後に、 の<h:selectBooleanCheckBox>場合、選択/選択解除が発生したときにフォームを送信します。これは、JavaScript のonchange属性をsubmit()(例: onchange = "submit()") に設定することで実行できます。これがすべて意味を成すように、コードを実行してみてください。

繰り返しますが、これはソリューションを導くのに役立つサンプルにすぎないことに注意してください。

public class SampleBean {
    private boolean renderValidatedForm; 
    private String firstInput; 
    private String secondInput; 

    //Constructor ommitted 
    //Setters and getters ommitted 

    public void toggleRender(ValueChangeEvent e) {
        boolean valueCheck = (Boolean) e.getNewValue(); 
        renderValidatedForm = valueCheck; 
        FacesContext.getCurrentInstance().renderResponse();
    }
}

xhtml

<h:form>
    <h:panelGrid>
        <h:panelGroup>
            <h:outputLabel for="enableCheckBox" value="Check to view form with validation"/>
            <p:selectBooleanCheckbox id="enableCheckBox" value="#{sampleBean.renderValidatedForm}" 
                                     onchange="submit()" 
                                     valueChangeListener="#{sampleBean.toggleRender}"
                                     immediate="true"/>
        </h:panelGroup>
        <h:panelGroup>
            <h:outputLabel for="withValidation" value="Form with validation" 
                           rendered="#{sampleBean.renderValidatedForm}"/>
            <h:inputText id="withValidation" value="#{sampleBean.firstInput}" 
                         required="true" rendered="#{sampleBean.renderValidatedForm}"/>
            <h:message for="withValidation"/>
        </h:panelGroup>
        <h:panelGroup>
            <h:outputLabel for="noValidation" value="Form without validation" 
                           rendered="#{!sampleBean.renderValidatedForm}"/>
            <h:inputText id="noValidation" value="#{sampleBean.secondInput}" 
                         rendered="#{!sampleBean.renderValidatedForm}"/>
        </h:panelGroup>
    </h:panelGrid>
    <h:commandButton value="Submit"/>
</h:form>
于 2013-07-09T20:00:57.310 に答える