[英]Validation across multiple fields in JSF/PrimeFaces
我需要以这样一种方式跨多个字段进行验证:仅当违反给定字段之一时才应验证。
它与交叉字段验证不同,在交叉字段验证中,一个字段的值取决于其余字段中一个或多个字段的值。
下面给出一个简单的场景。
<p:inputText id="txt1" value="#{testBean.txt1}" required="false" maxlength="45"/>
<p:inputText id="txt2" value="#{testBean.txt2}" required="false" maxlength="45"/>
<p:inputText id="txt3" value="#{testBean.txt3}" required="false" maxlength="45"/>
<p:commandButton id="btnSubmit" actionListener="#{testBean.insert}"
icon="ui-icon-check" value="Save"/>
其中,仅当给定的三个文本字段之一留为空白时,才发生验证冲突。 如果其中任何一个值都已填满,则应全部验证。 在这种情况下,不应违反验证。
如何进行这种情况? JSF / PrimeFaces是否提供某种方式以这种方式执行验证?
我很难满足您的具体功能要求,但是我相信您正在寻找“全部或全部”验证。 也就是说,要么所有字段都为空白,要么所有字段都应填写。 JSF实用程序OmniFaces库为此目的提供了一个验证器<o:validateAllOrNone>
。
使用方法如下:
<p:inputText id="txt1" value="#{testBean.txt1}" maxlength="45" />
<p:inputText id="txt2" value="#{testBean.txt2}" maxlength="45" />
<p:inputText id="txt3" value="#{testBean.txt3}" maxlength="45" />
<o:validateAllOrNone components="txt1 txt2 txt3" />
Primefaces提供了许多可以使您满意的方法。 首先,您可以在MBean方法中进行验证。 在您的情况下,您正在调用insert
方法,因此您可以执行以下操作:
public String insert(){
boolean error = false;
if(txt1.isEmpty()){
error = true;
}
if(txt2.isEmpty()){
error = true;
}
if(txt3.isEmpty()){
error = true;
}
if(error == true){
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Empty fields!", "Insert something in at least one input!"));
return null;
}else{
return "myPage"
}
}
请注意,您可以根据需要自己改善验证。 您还可以从以下位置更改消息:
FacesMessage.SEVERITY_WARN
至:
FacesMessage.SEVERITY_INFO
FacesMessage.SEVERITY_ERROR
FacesMessage.SEVERITY_FATAL
什么可以使您的应用程序获得更好的错误消息。
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
可能这会像魅力一样起作用! 如果您有兴趣,请查看“ Primefaces消息”展示柜 ,您可以在其中找到一些示例并更好地了解<p:messages>
工作方式。
另外,请随时检查<p:growl>
,我认为这比简单消息要好得多。 在这里查看咆哮声 。
希望我能对您有所帮助(:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.