【问题标题】:Setting value from cookies to TextField<Long> in Wicket在 Wicket 中将值从 cookie 设置为 TextField<Long>
【发布时间】:2013-05-22 12:33:55
【问题描述】:

我面临以下问题:

我有带过滤器的检票口页面。 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)

谢谢你的帮助

【问题讨论】:

  • 什么是formComponent?这应该在转换过程中(在 updateModel 之前)已经失败,所以 formComponent 的类型可能与 categoryField 不同。
  • 对不起,文中有错误...
  • ClassCastException 是在您的 (?) cz.myproject 代码中提出的。我们可能需要查看相关的代码摘录才能了解发生了什么。
  • 我在我们的代码中检查了类似的用例,它工作正常。请分享来自stacktrace(模型)的相关代码。

标签: java forms cookies wicket


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2015-06-05
    相关资源
    最近更新 更多