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

时间:2013-12-03 03:31:43

标签: validation jsf primefaces jsf-2.2

我需要跨多个字段进行验证,以便仅在违反其中一个给定字段时才应违反验证。

它不同于交叉字段验证,其中一个字段的值取决于其余一个字段的值。

下面给出一个简单的场景。

<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是否提供了一种以这种方式执行验证的方法?

2 个答案:

答案 0 :(得分:3)

我很难围绕您的具体功能要求,但我相信您正在寻找“全部或全部”验证。即要么所有字段都应为空,要么填写所有字段。 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" />

答案 1 :(得分:2)

当然!

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" /> 

enter image description here 可能这会像魅力一样!如果您有兴趣,请查看Primefaces Messages showcase,在那里您可以找到一些示例,并更好地了解<p:messages>的工作原理。

另外,请随意查看<p:growl>,我认为这比简单的消息好很多。在这里查看growl
enter image description here

希望我帮助过你(