Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Wiquery DatePicker显示时间,验证失败_Java_Validation_Wicket_Wiquery - Fatal编程技术网

Java Wiquery DatePicker显示时间,验证失败

Java Wiquery DatePicker显示时间,验证失败,java,validation,wicket,wiquery,Java,Validation,Wicket,Wiquery,Wicket页面中的以下代码中的Wiquery DatePicker有问题(使用CompundPropertyModel,date属性的类型为java.util.date): DatePicker-DatePicker=newdatepicker(“日期”){ @凌驾 公共布尔值可见(){ 返回selectedType.hasDate(); } }; datePicker.setDateFormat(DateUtil.DATE_模式);//模式为“dd.MM.yyyy” 添加(日期选择器);

Wicket页面中的以下代码中的Wiquery DatePicker有问题(使用CompundPropertyModel,date属性的类型为java.util.date):

DatePicker-DatePicker=newdatepicker(“日期”){
@凌驾
公共布尔值可见(){
返回selectedType.hasDate();
}
};
datePicker.setDateFormat(DateUtil.DATE_模式);//模式为“dd.MM.yyyy”
添加(日期选择器);
此绑定到的HTML:

<input wicket:id="date" id="date"/>

问题是,在编辑现有数据时,输入字段显示时间和日期,而在提交表单时,验证失败,因为这不符合模式


如何让DatePicker正确显示当前值?

这似乎是相对晦涩的Wiquery DatePicker组件中的一个缺陷。我已经切换到
org.apache.wicket.extensions.yui.calendar.DatePicker
,它没有这个问题。

作为
DatePicker
组件a
TextField
,为什么不在其中使用自定义
IConverter
在其
convertToObject
中只返回
dd.MM.yyyyyy

我无法看到浏览其任何注册的
IConverter
或其他转换输入的方式,因此这可能与此组件中的格式化输入冲突

更新

在使用WiQuery 1.2.4和Wicket 1.4.17进行快速启动调试后,它显示
日期选择器
(这是一个
文本字段
)的初始值是由
组件.getDefaultModelObjectAsString()执行的标准转换

由于
TextField
具有
IModel
,因此它将使用为
Date
类注册的
IConverter
。在您的情况下,它可能使用随时间格式化的自定义
IConverter
。我会尝试重写
DatePicker
getConverter()
,并使用符合
setDateFormat()
中指定格式的
SimpleDateFormat

此问题提示应与日期选择器一起指定
IConverter

您可能还会发现Wicket用户列表上的讨论很有用:。Julien Roche(项目所有者之一)在那里表示,
setDateFormat
仅在客户端使用JQuery时有效:

我认为您必须在wicket文本字段上设置正确的转换器(使用 方法getConverter的重写和类的重写 PatternDateConvert)。“dateFormat”选项仅在客户端起作用 使用jQuery

首先看一看

然后你知道wicket会把你的目标转换成一个文本。。你所要做的就是

重写应用程序类中的newConverterLocator()方法以提供自定义ConverterLocator

protected IConverterLocator newConverterLocator() {
    ConverterLocator converterLocator = new ConverterLocator();
    converterLocator.set(Date.class, new DateConverter());
    return converterLocator;
}

提示:小心java.sql.Date类转换器

您是否尝试过使用jquery原生日期选择器方法?似乎默认的日期格式是
mm/dd/yy
。默认值是否正常工作?@Xavi:我认为问题不在JavaScript级别,因为它只在显示现有数据时出现,而且我认为在用户操作字段之前根本不涉及jQuery datepicker。我已经在WiQuery 1.2.4和Wicket 1.4.7快速启动中试过了。初始值似乎没有根据
setDateFormat()
进行格式化。它以默认的
mm/dd/yy/
格式显示。但是,它没有显示时间。原来初始格式是注册的
IConverter
Date.class
提供的格式。毕竟,它的行为就像一个标准的
TexField
。希望这对已经决定使用Wiquery的人有用,但是我的项目已经在别处使用了Wicket extensions DatePicker,而我无意中使用了Wiquery。
protected IConverterLocator newConverterLocator() {
    ConverterLocator converterLocator = new ConverterLocator();
    converterLocator.set(Date.class, new DateConverter());
    return converterLocator;
}