2010-12-01 6 views
2

Wicket by Example guideをフォローしてObjectAutoCompleteFieldを動作させました。これはとてもうまくいきます。ObjectAutoCompleteFieldで最初に選択されたオブジェクトをWicketのページロードで表示する

私は大きな問題があります。これは、ページが読み込まれたときに、フィールドに最初に設定されたオブジェクトを表示することです。オブジェクトは、ObjectAutoCompleteFieldが使用されているフォームで使用するモデルから取得されます。 ObjectAutoCompleteFieldを変更すると、モデル属性が「接続」され、フィールドの後続の変更には、ページが読み込まれたときの最初のラベルではなく、適切なラベルがその場所に表示されます。オートコンプリート機能を使用してください)。

私はObjectAutoCompleteBuilderのドキュメントを見回しましたが、ページロード時に明示的に初期値を設定するための対応するメソッドが見つかりませんでした。

答えて

1

ObjectAutoCompleteFieldに関連するクラスを調べることで、最終的に解決策を見つけることができました。

ObjectAutoCompleteFieldは、ObjectAutoCompleteBuilderのbuildメソッドによって構築されます。したがって、ビルダーでreadOnlyRendererメソッドを呼び出し、getObjectRenderer内にラベルを作成する新しいObjectReadOnlyRendererを作成して、ObjectAutoCompleteFieldを取得して、ページのロード時に事前選択されたオブジェクトをレンダリングします。

ObjectAutoCompleteBuilder<Author, Long> builder = new ObjectAutoCompleteBuilder<Author, Long>(provider); 
builder.readOnlyRenderer(new ObjectReadOnlyRenderer<Long>() { 
    public Component getObjectRenderer(String id, IModel<Long> pModel, IModel<String> pSearchTextModel) { 
     return new Label(id, new PropertyModel<Author>(model, "author")); 
    } 
}); 

これは標準的な動作だと思うかもしれませんが、今後の参考になると思います。