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

コンパイラによれば、これは文字列を返すはずなので、これは本当に奇妙です

4

1 に答える 1

2

あなたが書くとき、あなたはあなたnew PropertyModel<String>(value, "awayScore")の中にあることを約束しawayScoreます。コンパイラはあなたの主張を検証することができず、自動変換はありません。valueString

このAbstractPropertyModelメソッドgetObjectでは、を返すように定義されてTいます。これは。に置き換えられObjectます。それがまだ機能する理由です。メソッドをオーバーライドしStringてキャストを返すとすぐに失敗します。

于 2013-01-21T09:51:20.707 に答える