2013-05-22 21 views
1

我面臨以下問題:從cookie設置值到TextField <Long>在Wicket

我有帶過濾器的檢票頁。過濾器是表單組件包含該文本字段:

TextField<Long> categoryField = new TextField<Long>("categoryId", 
    BindingModel.of(model, binding.categoryId()), 
    Long.class); 
add(categoryField); 

我想允許用戶記住他最後的過濾選項,所以我存儲在cookie中的字段值

CookieUtils utils = new CookieUtils(); 
utils.save(categoryField); 

能正常工作和字段值爲店在餅乾。但問題是,當我想從餅乾讀取值,並通過

utils.load(categoryField); 

然後我把它設置爲組件:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long 
    at cz.myproject.domain.MyFilterBindingPath$CategoryIdBinding.setWithRoot(MyFilterBindingPath.java:494) 
    at cz.myproject.binding.BindingModel.setObject(BindingModel.java:66) 
    at org.apache.wicket.Component.setDefaultModelObject(Component.java:3061) 
    at org.apache.wicket.markup.html.form.FormComponent.setModelObject(FormComponent.java:1560) 
    at org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1104) 
    at org.apache.wicket.markup.html.form.FormComponent.setModelValue(FormComponent.java:1046) 
    at org.apache.wicket.util.cookies.CookieUtils.load(CookieUtils.java:135) 

謝謝大家幫忙

+0

什麼是formComponent?這應該在轉換過程中(在updateModel之前)已經失敗,所以也許formComponent的輸入方式與categoryField不同。 – zeratul021

+0

對不起,這是文本中的錯誤... – Daniel

+0

'ClassCastException'在你的(?)'cz.myproject'代碼中引發。我們可能需要查看相關的代碼提取以查看正在發生的事情。 –

回答

0

你的代碼是有點不完整的。它不顯示BindingModel的實現。即使你看TextField,它期望作爲模型的IModel的任何實現,但CookieUtil.load()返回String。所以返回類型實際上不能從String轉換爲Long。將您的模型實現更改爲類型安全。