2011-12-16 8 views
0

私はオブジェクトを持っており、いくつかのコンポーネントでは、そのプロパティの2つをデリミタで連結してレンダリングする必要があります。いずれかのプロパティーがNULLの場合、区切り文字は表示されず、not nullプロパティーのみが表示されます。両方がnullの場合、それはまったく表示されません。Wicket:PropertyResolverを使用していますか?

二つの特性は、このようにアクセスされる:

thing.getFoo() 

thing.getStuff().getBar() 

をレンダラは事のタイプのインスタンスを取るつの静的メソッドを持つクラスになり、文字列を返します。

問題は、thing.getStuff()の結果とその結果に多くのnullチェックを行うのが醜いので、代わりにPropertyResolverを使用するかどうか疑問に思っています。

問題は、JavadocはWicket APIの一部ではなく、自分が何をしているのか知っていればそれを使用するだけだということです。私は、知っておくべきいくつかの注意点や問題があると推測しています。もしそうなら、彼らは何ですか?

答えて

1

この場合、カスタムの読み取り専用モデルを使用します。ような何か:

new ConcatenatingPropertyModel(thing, "foo", "stuff.bar"); 

private static class ConcatenatingPropertyModel extends AbstractReadOnlyModel<String> { 

    private List<PropertyModel<String>> models = new ArrayList<PropertyModel<String>>(); 

    public ConcatenatingPropertyModel(Object object, String... props) { 
     for (String prop : props) { 
      models.add(new PropertyModel<String>(object, prop)); 
     } 
    } 

    @Override 
    public String getObject() { 
     // iterate over delegate property models and concatenate 
    } 

    @Override 
    public void detach() { 
     super.detach(); 
     for (PropertyModel<String> model : models) { 
      model.detach(); 
     }  
    } 
} 

次に、あなたはこのようにモデルを使用することができます

関連する問題