5

DropDownChoiceに問題があります。アイテムを事前に選択する必要がありますが、見つけたすべてのチュートリアルと例では、プリミティブ型のリストのみを検討します。

オブジェクトのリストがあります。

class myObject {
   private String name;
   private String surname;
   [setter and getter]
} 

他のクラスでは

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

次のコンストラクターを使用してDropDownChoiceimをビルドするには:

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

この上:

final DropDownChoice<myObject> ddc = new DropDownChoice<myObject>("wicket_id", 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);

私はその種の呼び出しをエミュレートするためにこのようなことを試みました:

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

しかし、私が得たのはエラーです:

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

どうか、私を理解するのを手伝ってください。

ありがとう

4

2 に答える 2

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;
    }
}
于 2012-04-27T14:25:46.933 に答える
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();

        }
于 2013-03-27T09:45:59.417 に答える