我想验证我的inputText字段,该字段位于popupPanel中。它应该只包含数字。
<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>
不幸的是,当我输入错误的输入并在按钮上单击两次时,它会保存请求并关闭弹出窗口而不请求输入正确的文本。
我还使用了Java验证器,但行为仍然相同。
我该怎么做才能纠正这个错误?
答案 0 :(得分:0)
这是因为你无条件关闭弹出窗口。如果验证正常,您必须检查自己。在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
的组件,您的意思是{{1 }}?另请注意,我已将a4j:commandButton
更改为action="#{myBean.save()}"
,这是正确的。
答案 1 :(得分:0)
解决。在表单中有一些h:复选框,我删除了复选框,现在它工作正常。我不知道为什么Richfaces复选框无法正常工作,但我用HTML复选框替换它们。