【问题标题】:Validation across multiple fields in JSF/PrimeFaces跨 JSF/PrimeFaces 中的多个字段进行验证
【发布时间】:2013-12-03 03:31:43
【问题描述】:

我需要跨多个字段进行验证,只有在违反给定字段之一时才应违反验证。

它不同于跨字段验证,其中一个字段的值取决于其余字段中的一个或多个的值。

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

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

【问题讨论】:

  • 嗨,伙计,我想知道使用验证器验证而不是使用托管 bean 验证的优点、问题、性能、增强,或者只是遵循标准等?它根据@Fernando Paladini 的答案。除了你说的还有其他原因吗?谢谢!

标签: validation jsf primefaces jsf-2.2


【解决方案1】:

我很难理解您的具体功能要求,但我相信您正在寻找“全有或全无”验证。 IE。要么所有字段都应为空白,要么应填写所有字段。 JSF 实用程序库OmniFaces 有一个用于此目的的验证器&lt;o:validateAllOrNone&gt;

你可以这样使用它:

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

【讨论】:

    【解决方案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" /> 
    

    可能这会像一个魅力!如果您有兴趣,请查看Primefaces Messages showcase,您可以在其中找到一些示例并更好地了解&lt;p:messages&gt; 的工作原理。

    另外,请随时查看&lt;p:growl&gt;,我认为这比简单的消息要好得多。在这里查看growl

    希望对你有所帮助(:

    【讨论】:

    • 如果您有任何问题,请随时提问(:
    • 实际上,我一直在寻找一种通过验证器执行验证的方法。在 JSF 托管 bean 本身中执行验证是可怕的。此外,我在一个页面上有超过 15 个这样的字段,需要这么多这样的条件检查,这很乏味。我希望 JSF/PrimeFaces 应该有一种公平的方式来执行这种验证。谢谢。
    • 对不起,小小,我不明白你的问题。我坚持认为您需要一种方法来检查所有字段是否为空白,但如果选择了一个或多个,则不是问题。 @Balusc 比我更能理解你的问题,如果我没有回答你的需要,对不起:/
    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多