【问题标题】:Masking for a Calendar in JSF, Primefaces to Accept only Dates in format of MM/dd/yyyy?在 JSF 中屏蔽日历,Primefaces 只接受 MM/dd/yyyy 格式的日期?
【发布时间】:2013-12-03 11:13:21
【问题描述】:

我正在使用 JSF,Primefaces。

我的应用中有一个搜索条件功能,我面对的是problem with calendar date

我正在为我的应用程序使用这段代码。

<p:calendar id="Date" value="#{bean.fromDate}" pattern="MM/dd/yyyy" showOn="button"/>

即使我给出了日期214/03/2013,我也遇到了这种问题。

as 然后将其转换为10/03/2030 并执行操作!

但是,我真正需要做的是display a messagemask 输入字段为99/99/9999.

I referred this Link

在我的场景中,我不应该使用readonlyInput="true",因为我可能会也可能不会给出日期。

如果我正在使用它,那么我无法将该字段清空,因为我正在使用 @SessionScoped。

【问题讨论】:

    标签: jsf date jsf-2 primefaces


    【解决方案1】:

    看看 Primefaces Calendar 是如何工作的,它默认使用 Java 的 SimpleDateFormat 来完成解析工作。如果您查看文档,Java 使用启发式方法强制任何给定输入转换为特定日期。

    指定日期/时间解析是否宽松。通过宽松的解析,解析器可以使用启发式方法来解释不精确匹配该对象格式的输入。使用严格解析,输入必须匹配此对象的格式。

    这就是为什么您的日历输入会接受那些甚至不存在的奇怪日期。关键是为不接受宽松日期格式的自定义转换器提供日历。 JSF already provides one:

    <p:calendar ...>
        <f:convertDateTime pattern="MM/dd/yyyy" />
    </p:calendar>
    

    如果最终用户提供的日期不存在,则会引发转换错误。

    另请参阅:

    【讨论】:

    • 感谢 4 的答案 :-)
    • 如果我将日期指定为12/12/201345,则不会显示任何错误消息。我的代码是&lt;p:calendar id="FromDate"value="#{bean.fromDate}"showOn="button" converterMessage="Please enter valid from date"&gt; &lt;f:convertDateTime pattern="MM/dd/yyyy" /&gt; &lt;/p:calendar&gt;
    • 事实上,即使模式涵盖了年份字段的四个字符,201345 实际上是有效的年份,所以 jsf 数据解析器会对其进行解析。不正确的是接受 13 作为一个月或 32 作为一天。无论如何,您也可以使用自定义转换器/验证器仅接受 4 位数年份。
    • 谢谢@Xtreme Biker
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 2012-09-16
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    相关资源
    最近更新 更多