2

在我的表单中,我有 textField:

                add(new TextField<String>("awayScore", new PropertyModel<String>(value, "awayScore") {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public String getObject() {
                        logger.info("textField");
                        return super.getObject();
                    }
                }));

如您所见,我只是添加了记录器。

我在这里没有看到任何问题,但是当我运行我的应用程序时,我收到了这个错误:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
     at org.toursys.web.PlayOffPage$PlayOffForm$2$1$1.getObject(PlayOffPage.java:135)

第 135 行包含:

return super.getObject();

我真的很困惑,因为没有覆盖这个作品

更新:

当我将代码编辑为:

Object value = super.getObject();
logger.error(value.getClass() + "");

此代码返回:

 class java.lang.Integer

这真的很奇怪,因为根据编译器这应该返回 String

4

1 回答 1

2

当你写的时候,new PropertyModel<String>(value, "awayScore")你承诺你的awayScoreinvalue是一个String. 编译器无法验证您的声明并且没有自动转换。

AbstractPropertyModel该方法getObject中定义为返回一个T将被替换为Object. 这就是它仍然有效的原因。一旦您覆盖返回的方法,String演员表就会失败。

于 2013-01-21T09:51:20.707 回答