2012-08-22 76 views
0

DropDownChoice小問題。 我使用Object的列表構建了一個DropDownChoice。 舉個例子:Wicket - DropDownChoice POJO物業模型

public MyClass 
    private String code; 
    private String description; 
[...] 

不是採取另一對象

public FormModelObject 
    private String code; 

,我可以伊斯利建立使用ChoiceRender的DropDownChoice選擇什麼節目(description屬性)和獲得什麼(代碼屬性)。

不幸DropDownChoice返回整個Object(MyClass),我無法設置FormModelObject中的屬性Code(它只是在MyClass上啓動一個toString()方法)。

如何在不使用Ajax的情況下獲得它?

謝謝

+0

爲什麼你會嗎?你有支持實現IModel 的DDC的模型,並且可以簡單地從它訪問對象和代碼屬性? – bert

回答

1

那麼,你可以重寫DropDownChoice的方法onModelChanged()並用新值更新residenceZipCode。例如:

DropDownChoice<City> drop = new DropDownChoice<City>("residenceZipCode",new Model(), cityList,new ChoiceRenderer<City>("name", "zipcode")){ 
    onModelChanged(){ 
     String newZipCode = (String)PropertyResolver.getValue("zipCode",getModelObject()); 
     PropertyResolver.setValue("residenceZipCode", res, newZipCode, new PropertyResolverConverter()); 
    } 

}; 

DropDownChoice必須有它自己的模型。

1

嘗試模型鏈接。你應該建立一個像這樣的屬性模型替換形式的變量代碼:

//this is the model of your DropDownChoice 
Model<MyClass> myModel = new Model<MyClass>(); 
//... 

PropertModel myCode = new PropertModel(myModel, "code"); 

現在使用mycode的,而不是代碼的形式。

0

其bettere編寫一些代碼:

class City { 
     private String zipCode; 
     private String name; 
    } 

    class Residence { 
     private String residenceZipCode; 
    } 

protected Residence res; 

public ResidenceForm() { 
    super("form", new CompoundPropertyModel<Residence>(res)); 

    List<City> cityList = someManager().loadAllCity(); 

    DropDownChoice<City> drop = new DropDownChoice<City>("residenceZipCode",cityList,new ChoiceRenderer<City>("name", "zipcode")); 
add(drop); 

現在。我無法更改住宅或城市,我無法在提交按鈕的方法中編寫代碼。

我想要的是住宅內的郵編。我現在得到的是相當於City.toString()

1

看看DDC的類型參數:在你的情況下,它是城市,因此DDC適用於City對象。

如果你不希望出現這種情況,更改類型,編譯器會引導你的方式:

DropDownChoice<String> drop = new DropDownChoice<String>("residenceZipCode",zipCodesList,new CityChoiceRenderer()); 

class CityChoiceRenderer implements IChoiceRenderer<String> { 
    Object getDisplayValue(String zipCode) { 
    return zipCodeToName(zipCode); 
    } 

    String getIdValue(String zipCode, int index) { 
    return zipCode; 
    } 
}