Wicket WARNING対処 Make sure you are not calling Component#getString() inside your Component's constructor.


コンソールログに以下のWARNINGが出ていたので、
気になって対処したので、対処方法を記述します。

エラー内容

WARN  [2016-05-28 10:45:55,930] org.apache.wicket.Localizer: 
Tried to retrieve a localized string for a component that has not yet been added to the page. 
This can sometimes lead to an invalid or no localized resource returned.
Make sure you are not calling Component#getString() inside your Component's constructor. Offending component: [FooterPanel [Component id = footerPanel]]

Componentのコンストラクター内で、Component#getString()callすると、
ページクラスに追加される前リソースファイルを取りに行くから、別の場所に移動しろ。
と言っているように思います。

Stack OverflowでVersion1.4以下とVersion1.5以降の対処方法が記載されています。
java - Calling getString() in constructor in Wicket gives error - Stack Overflow

対処方法

Panelクラスのコンストラクタ内に記述していたgetString()メソッドを
onInitializeメソッド内に移動しました。

  • Before

        public FooterPanel(String id) {
            super(id);
            add(new Label("sinceYear", getString("sinceYear")));
            add(new Label("appName", getString("applicationName")));
            add(new ExternalLink("authorLink", getString("authorLinkUrl"), getString("authorLinkLabelText")));
        }
    

  • After

        @Override
        protected void onInitialize() {
            super.onInitialize();
            add(new Label("sinceYear", getString("sinceYear")));
            add(new Label("appName", getString("applicationName")));
            add(new ExternalLink("authorLink", getString("authorLinkUrl"), getString("authorLinkLabelText")));
        }
    

以上です。

コメント