繁体   English   中英

在JSF / PrimeFaces中跨多个字段进行验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM