Jon*_*ing 8 java validation jsf calendar primefaces
我遇到的问题是PrimesFaces 3.4.1日历.当使用通过按钮或输入字段焦点激活的弹出日期选择器时,您只能选择工作正常,快乐日子的有效日期!
当您手动将日期添加到输入字段时,如果您添加一个无效的日期,PrimeFaces日历组件会将其转换为有效日期然后发送它,这意味着后端验证是不行的.以下一些有趣的翻译:
要重现这种疯狂,请看看PrimeFaces日历展示.
我已经看到使用该readOnlyInput='true'属性的解决方案,但这似乎只是防止在字段中输入字母而不是数字或斜杠.以下是我实施的日历的一个实例:
<p:calendar id="fldDateOfBirth"
            value="#{pc_CreateUser.user.dateOfBirth}"
            binding="#{pc_CreateUser.dobComp}"
            navigator="true"
            pattern="dd/MM/yyyy"
            maxlength="10"
            yearRange="-100"
            validator="#{pc_CreateUser.validateDOB}"
            title="#{msg.user_date_format_default_tip}"
            converterMessage="#{msg.user_error_dob_invalid}"
            readOnlyInput="true"
            showOn="button" />
解决方案明智我对任何建议持开放态度:
在此先感谢,这已经引起了我好几周的问题!
Bal*_*usC 14
该<p:calendar>封面下使用SimpleDateFormat这反过来默认使用宽松的解析,导致溢出值,以滚动到下一个日期度量水平.例如,1月32日将成为2月1日等.
用普通的Java术语来说,这可以通过DateFormat#setLenient()传递来关闭false.另请参阅此问题:使用dateformat验证日期.
在JSF术语中,您基本上需要提供一个使用非宽松的自定义转换器DateFormat.幸运的是,标准的JSF已经提供了这样一个开箱即用的方法<f:convertDateTime>,所以你可以直接使用它.
<p:calendar ...>
    <f:convertDateTime pattern="dd/MM/yyyy" />
</p:calendar>