【问题标题】:Strict date pattern for DateTextField in WicketWicket 中 DateTextField 的严格日期模式
【发布时间】:2013-07-03 09:37:14
【问题描述】:

我的应用程序中有一个 DateTextField 组件,我希望使用预定义的模式输入日期。我需要的模式是“yyyy-MM-dd”。我使用以下代码创建了 DateTextField。

    DateTextField dtf_ExpiryDate = DateTextField.forDatePattern("ExpDate", "yyyy-MM-dd");
    dtf_ExpiryDate.add(new DatePicker());

它有助于防止大多数其他格式的日期输入。但它接受 dd-MM-yyyy 格式的输入并将其转换为某种奇怪的格式。例如,12-06-2013 会自动转换为 0012-06-20

当日期在 dd-MM-yyyy 中给出时,有没有办法抛出错误?

DateTextField 的 Javadocs 说转换是使用 Joda 时间解析器在内部完成的。有没有办法添加更多的约束?

我真的不希望数据被捕获为字符串并添加一个 StringValidator 来检查它是否使用正则表达式确认模式。

谢谢

【问题讨论】:

  • DateTextField 没有一些可覆盖的validate() 方法吗?
  • 如果我们将自定义验证器添加到 DateTextField,则 validate() 方法可用。但是方法获取的数据(Validatable 类型)是 'Date' 类型的,它已经被转换了。所以我们当时无法验证模式。正如我所说,如果我使用字符串来捕获数据,那么我可以使用 validate() 方法抛出错误,因为我将验证一个字符串。
  • 你为什么不想要带有正则表达式的 StringValidator 呢?这是 Wicket 中的一种正常方式......绑定到其他机制。

标签: wicket wicket-1.5 wicket-1.6 wicketstuff


【解决方案1】:

据我所知,答案是否定的。 DateTextField 在内部使用 DatePattern 或 DateStyles 并且不可能强制执行更严格的规则。如果您不想使用 Javascript(自定义)或 JQuery,则必须使用 REGEX 来验证输入。

看看here。使用如下所示的 StrictPatternDateConverter 类对输入实施严格验证。

【讨论】:

  • 我想,基本上我能做的就这些了。谢谢你。 StrictPatternDateConverter 是一个很好的指针。
【解决方案2】:

是的! StringRegExp 是一个很好的解决方案。但另一个解决方案可能是使用 jqWicket。它提供了一个 MaskedInputBehavior。看一看:http://code.google.com/p/jqwicket/wiki/MaskedInputExample

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2015-05-19
    • 2011-01-15
    相关资源
    最近更新 更多