-1

popupPanel にある inputText フィールドを検証したいと思います。数字のみを含める必要があります。

<h:form>
    <h:outputText value="Input:"/>
        <h:inputText id="myID" value="#{myBean.field}"
            validatorMessage="Only numbers">
            <f:validateRegex pattern="([0-9])*$" />
            <rich:validator />
            <a4j:ajax event="change" render="msgValidator" />
        </h:inputText>
        <h:message id="msgValidator" for="myID" styleClass="text_colorRed" />
</h:form>

やっぱりボタンで全部保存したい。入力が正しい場合はポップアップを閉じたい、そうでない場合はポップアップを閉じずに正しい入力を再挿入したい。

<a4j:ajaxButton type="submit" value="Save" styleClass="text_weigthBold"
    action="#{myBean.save()}" render="myTable"
    oncomplete="#{rich:component('myPopup')}.hide();" execute="@this">
</a4j:ajaxButton>

残念ながら、間違った入力を入力してボタンを 2 回クリックすると、正しいテキストの入力を要求せずに要求が保存され、ポップアップが閉じられます。

Java バリデーターも使用しましたが、動作は同じです。

このバグを修正するにはどうすればよいですか?

4

2 に答える 2

0

これは、ポップアップを無条件に閉じているためです。検証がOKかどうかを自分で確認する必要があります。JSF 2.0 では、FacesContext#isValidationFailed()を使用できます。

<a4j:commandButton execute="@form" value="Save" styleClass="text_weigthBold" 
    oncomplete="if (!#{facesContext.validationFailed}) {#{rich:component('myPopup')}.hide();}"
    action="#{myBean.save}" render="myTable" />

facesContext.maximumSeverity.ordinal gt 0またはを使用して、他のエラーも確認できますfacesContext.maximumSeverity != null

私は RF 3.X を知りません (RF 3 または 4 を使用しているかどうかもわかりませんでした) という名前a4j:ajaxButtonのコンポーネントがなかったようa4j:commandButtonです。また、どちらが正しいかを変更action="#{myBean.save()}"したことにも注意してaction="#{myBean.save}"ください。

于 2016-05-07T08:51:30.353 に答える