2011-11-04 21 views
3

我具有在檢票頁下面的代碼與Wiquery的DatePicker問題(使用CompundPropertyModel,日期屬性是java.util.Date類型):Wiquery的DatePicker顯示時間,驗證失敗

DatePicker<Date> datePicker = new DatePicker<Date>("date"){ 
    @Override 
    public boolean isVisible() { 
     return selectedType.hasDate(); 
    } 
}; 
datePicker.setDateFormat(DateUtil.DATE_PATTERN); // pattern is "dd.MM.yyyy" 
form.add(datePicker); 

的HTML這勢必:

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

的問題是,修改現有的數據時,輸入字段顯示的時間與日期一起,並提交表單時,驗證,因爲這不符合失敗模式。

如何讓DatePicker正確顯示當前值?

回答

1

這似乎是一個相對模糊的Wiquery DatePicker組件中的錯誤。我已切換到org.apache.wicket.extensions.yui.calendar.DatePicker,這沒有這個問題。

+0

您是否嘗試過使用jQuery原生的DatePicker ['setDateFormat'](http://docs.jquery.com/UI/Datepicker# option-dateFormat)方法?似乎默認的日期格式爲'MM/DD/yy'。默認工作正常嗎? –

+0

@Xavi:我不認爲這個問題是在JavaScript的水平,因爲它只顯示現有的數據出現時,我不認爲jQuery的日期選擇器是在所有涉及到用戶操作的領域。 –

+0

我在一個WiQuery 1.2.4和1.4.7檢票快速入門嘗試這個。初始值似乎並沒有得到根據'setDateFormat格式化()'。它以默認的'mm/dd/yy /'格式顯示。但是,它沒有顯示時間。 –

1

身爲DatePicker分量TextField,爲什麼不使用自定義IConverter它只能dd.MM.yyyy在其convertToObject返回?

我一直無法瀏覽其sources任何註冊的IConverter或其他方式來轉換輸入,所以這可能會與此組件中的任何格式輸入衝突。

UPDATE

在使用WiQuery 1.2.4和檢票1.4.17的快速啓動調試在此之後,它表明DatePicker的初始值(這是一個TextField)是由Component.getDefaultModelObjectAsString()執行標準轉換。

由於TextField有一個IModel<Date>,它會使用任何IConverter註冊爲Date類。在你的情況下,它可能會使用隨時間格式化的自定義IConverter。我會嘗試覆蓋DatePickergetConverter()並使用SimpleDateFormat,該格式符合setDateFormat()中指定的格式。

這個問題給出了,一個IConverter暗示應與DatePicker一起規定:Issue 168: Invalid (or uncommon) date format for NL in DatePicker

您也可能會發現在檢票用戶討論列表有用:DatePicker to pick a year。朱利安羅氏公司(項目業主之一)指出那裏setDateFormat只能在客戶端使用jQuery:

我認爲你必須設置正確的轉換器上的小門文本框(與 的倍率方法getConverter和類 PatternDateConvert)。 「dateFormat」選項僅適用於使用jQuery的客戶端 。

+0

希望這對於已經決定使用Wiquery的人有用,但是我的項目已經在其他地方使用Wicket擴展DatePicker,並且我意外地使用了Wiquery。 –

0

先看看https://cwiki.apache.org/WICKET/using-custom-converters.html

那麼你知道,檢票口轉換你反對從技工所以文本..所有你需要做的的應用程序類

覆蓋newConverterLocator()方法來提供定製ConverterLocator。

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

提示:注意用java.sql.Date類轉換器