将值从cookie设置为Wicket中的TextField <long> </long>

时间:2013-05-22 12:33:55

标签: java forms cookies wicket

我面临以下问题:

我有带过滤器的wicket页面。 Filter是包含此TextField的表单组件:

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

我想让用户记住他最后的过滤器选项,因此我将字段值存储在cookie中

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

这很好,字段值存储在cookie中。但问题是当我想从cookie中读取值并通过

将其设置为组件时
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)

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

您的代码有点不完整。它没有显示BindingModel的实现。即使您查看TextField,它也希望将模型作为模型的任何实现,但CookieUtil.load()会返回String。所以返回类型实际上不能从String转换为Long。将模型实现更改为类型安全。