【问题标题】:Validator issue in JSF2JSF2 中的验证器问题
【发布时间】:2014-01-11 12:18:27
【问题描述】:

我们正在从 JSF 1.2 迁移到 JSF2。 我们在验证中遇到问题。我们正在使用 apache myfaces 2 和 rich faces 4.3 下面是xhtml代码:

<h:form id="form">      
            <ui:include src="panel1.xhtml"/>

                <h:commandButton id="btn1" value="Submit" action="#{bean.submit}"/>

</h:form>

panel1.xhtml 包含如下自定义组件:

  <h:panelGrid columns="2">

               <h:outputText value="Enter Phone"/>                                 
               <h:inputText id="compId" value="#{map['Phone']}" size="12" maxlength="20"  required="true" 
               validator="#{validator.validatePhone}"/>

           <!-- other components omitted  -->
 </h:panelGrid>

 public void validatePhone(FacesContext arg0, UIComponent arg1, Object obj)
            throws ValidatorException {

        String phoneVal = (String) obj;

        if(phoneVal .length() <5){
            //rest of the code is omitted 
        }

}

问题是,当没有输入电话值(保留为空)并提交表单时,以下是观察结果。

JSF 2: 使用 Object obj 值(在 validatePhone 方法中)调用 validator.validatePhone 为 null

JSF 1.2: required = "true" 属性首先生效,并且根本不调用 validator.validatePhone(如果 Phone 字段中没有值)和验证 显示错误。

问题是:

1) 为什么 JSF 2 调用 validator.validatePhone ,即使 Phone 字段中没有值? 2)为什么在上述情况下 JSF 1.2 和 JSF 2 的行为会发生变化?

【问题讨论】:

    标签: jsf-2 validation jsf-1.2


    【解决方案1】:

    不一致的原因是在 JSF2 中,null 值默认不会失败验证。来自the Javadocs

    为了使验证器完全符合规范的第 2 版及更高版本,它不得对空值或空值进行验证失败,除非它专门用于处理空值或空值

    要支持 JSF1.2 中的验证行为,请使用 javax.faces.VALIDATE_EMPTY_FIELDS 上下文参数:

    <context-param>
        <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
        <param-value>false</param-value>
    </context-param>
    

    【讨论】:

    • 感谢您的帮助。如上所示添加上下文参数与 JSF 1.2 完全相同
    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2013-11-23
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多