Java Wiquery DatePicker显示时间,验证失败
Wicket页面中的以下代码中的Wiquery DatePicker有问题(使用CompundPropertyModel,date属性的类型为java.util.date):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” 添加(日期选择器);
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
组件aTextField
,为什么不在其中使用自定义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;
}