0

モデルの読み込み中にエラーが発生した場合、それをユーザーに提示する正しい方法は何ですか? ページにフィードバック コンポーネントを追加し、error() を使用するのが正しい方法のようですが、そうすると次のエラーが発生します。

Caused by: org.apache.wicket.WicketRuntimeException: Cannot modify component hierarchy after render phase has started (page version cant change then anymore)
    at org.apache.wicket.Component.checkHierarchyChange(Component.java:3572)
    at org.apache.wicket.Component.addStateChange(Component.java:3501)
    at org.apache.wicket.Component.error(Component.java:1254)
    at com.prosc.wicket.LoadableDetachableModelErrorTest$1.load(LoadableDetachableModelErrorTest.java:21)
    at com.prosc.wicket.LoadableDetachableModelErrorTest$1.load(LoadableDetachableModelErrorTest.java:17)
    at org.apache.wicket.model.LoadableDetachableModel.getObject(LoadableDetachableModel.java:121)
    at org.apache.wicket.Component.getDefaultModelObject(Component.java:1605)

ここに私のJavaコードがあります:

package com.prosc.wicket;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.LoadableDetachableModel;

public class LoadableDetachableModelErrorTest extends WebPage {
    public LoadableDetachableModelErrorTest() {
        add( new FeedbackPanel( "feedback" ) );
        add( new Label("dynamicText", new LoadableDetachableModel<String>() {
            @Override
            protected String load() {
                String result = "Hello World";
                error( "Uh oh, some imaginary problem happened" );
                return result;
            }
        }));
    }
}

ここに私のHTMLマークアップがあります:

<html>
<body>
<div wicket:id="feedback" />
<div wicket:id="dynamicText" />
</body>
</html>

予期される結果は、エラー メッセージが表示された空白のページがユーザーに表示されることです。

4

2 に答える 2

0

Wicket がコンポーネントのレンダリングを開始すると、状態を変更できなくなります。

コンポーネントの #onConfigure() でエラーを確認する必要があります。

于 2015-01-12T09:05:07.903 に答える