1

ページの例外処理を追加しましたが、今度はパネルに対して実行したいと思います。

http://apache-wicket.1842946.n4.nabble.com/ExceptionHandling-in-Panels-td3311271.htmlhttp://apache-wicket.1842946.n4.nabble.com/newbie-best-practice-を見つけましたfor-not-rendering-component-td1871632.htmlですが、ページのようにパネルの例外処理の組み込みサポートが Wicket にないことに気付いたので、答えは満足のいくものではありません。また、パネル マークアップを含むフラグメントとエラー フラグメントのどちらを選択するかは、私が探している堅牢なサポートではありません。私の Web アプリの例外のほとんどは、コンポーネントが追加され、モデルが使用されるロジックのセクションで発生する可能性があるため、ロジックのその部分をコンストラクターに配置して、エラーが発生したときにそれをキャッチできるようにすることを考えました。次に、必要なエラーパネルを表示します。何かのようなもの:

try{
  add(new MyPanel(panelId, model));
}catch (Exception e){
  add(new ErrorPanel(panelId, e));
  ... 
}

しかし、コンストラクターで getString() メソッドを使用してプロパティを解決すると、警告が表示されます。

だから、私の質問は次のとおりです。
- これが解決されたオンラインの例はありますか? またはそれについて何か考えはありますか?
- コンストラクターで getString() を使用すると、そのタイプの警告がスローされる場合、ベスト プラクティスは何ですか?
- そのロジックをコンストラクターに配置することはできません。そこでプロパティを解決する必要がないためです。私が言及したオプション以外にどのようなオプションがありますか?

4

2 に答える 2

2

パネル内のほとんどのロジックと同様に、コンストラクターは最適な場所ではありません。構築時には、パネル (またはその他のコンポーネント) はまだページに接続されていません。これにより、一部のコンポーネントにはマークアップさえない脆弱な状態のままになります。より複雑なロジックは、コンストラクターの外に配置する必要があります。Wicket 1.5 は、任意のロジックを安全に配置できる場所でオーバーライドできる onInitialRender メソッドを提供します。Wicket 1.4.x では、onBeforeRender を次のように実装することで、そのフックをシミュレートする簡単な方法があります。

@Override
protected void onBeforeRender() {
    if (!hasBeenRendered()) {
        onInitialRender();
    }
    super.onBeforeRender();
}

したがって、一度だけ実行される onInitialRender-hook を作成し、IMO は他のフックに依存しないロジックを配置するのに最適な場所です。

編集:あなたの場合、警告は、リソースが現在のコンポーネントまたは最終アプリケーションレベルで見つからない場合にフォールバックとして使用できるコンポーネントの階層がないため、Resource-Lookups の意図されたチェーンを使用できないことを示しました。

于 2011-05-21T11:01:45.710 に答える