2012-04-27 13 views
4

DropDownChoiceに問題があります。私はアイテムをあらかじめ選択しなければならないが、私が見つけたすべてのチュートリアルとサンプルは、プリミティブ型のリストだけを考慮する。Wicket - オブジェクトを含むDropDownChoiceを選択しました

私はオブジェクトのリストを持っています。このようにし

final DropDownChoice<T> ddc = new DropDownChoice<T>(id, data, new ChoiceRenderer<T>(choiceRendererExpression, choiceRendererIdExpression)); 

:以下constuctorを使用してDropDownChoiceイムを構築するには

class myObject { 
    private String name; 
    private String surname; 
    [setter and getter] 
} 
他のクラスで

List<MyObject> myList = some_data_retrieve(); 
MyObject defaultValue = some_simple_data_retrieve(); 

final DropDownChoice<myObject> ddc = new DropDownChoice<myObject>("wicket_id", myList, new ChoiceRenderer<myObject>("name", "surname")); 

。すべてのチュートリアル/例では、Modelを持つ別のコンストラクタを使用しています。たとえば:

final DropDownChoice<myObject> ddc = new DropDownChoice<myObject>("wicket_id", new PropertyModel<myObject>(this,"defaultValue"),myList, new ChoiceRenderer<myObject>("name", "surname")); 

をしかし、私が得たことは誤りである:

private static final List<String> SEARCH_ENGINES = Arrays.asList(new String[] { 
     "Google", "Bing", "Baidu" }); 
private String selected = "Google"; 
DropDownChoice<String> listSites = new DropDownChoice<String>(
     "sites", new PropertyModel<String>(this, "selected"), SEARCH_ENGINES); 

私はコールのようなものをエミュレートするために、このような何かを試してみました

No get method defined for class: package$WicketPage expression: defaultValue 

してください、私はundersand助けます。

おかげ

答えて

8

これは、あなたがDropDownChoiceを追加するページまたはコンポーネントのあなた「はdefaultValue」のゲッターとセッターを追加する必要があることを意味します。

public class MyPage extends WebPage { 

    private MyObject defaultValue; 

    public MyPage(PageParameters pageParameters) { 
     super(pageParameters); 

     defaultValue = some_simple_data_retrieve(); 
     List<MyObject> myList = some_data_retrieve(); 

     add(new DropDownChoice<myObject>(
         "wicket_id", 
         new PropertyModel<MyObject>(this,"defaultValue"), 
         myList, 
         new ChoiceRenderer<MyObject>("name", "surname") 
     );   
    } 

    public MyObject getDefaultValue() { 
     return defaultValue; 
    } 

    public void setDefaultValue(MyObject defaultValue) { 
     this.defaultValue = defaultValue; 
    } 
} 
+0

コンストラクタ内の2番目のパラメータは、選択された要素のモデルです。デフォルト値のモデルではありません。これは、私が改札を理解する方法です。 – drdrej

0

PropertyModelこのような問題のために良い選択です。 MyObjectはオブジェクトで、文字列はnameです。名前にはtoString()メソッドがオーバーライドされており、正常に動作しています。このメソッドを使用することをお勧めします。

topicDropDown = new DropDownChoice<MyObject>("wicktID", new PropertyModel<MyObject>  (this.object, "exp"), new LoadableDetachableModel<List<MyObject>>() { 
     @Override 
     protected List<MyObject> load() { 
      return top.getAllObjects(); 

     } 
関連する問題