最好使用您的預定義參數來擴展DropDownChoice
,而不是使用DropDownChoice
的Panel
。
有此做法至少有兩個好處:
- 你並不需要創建單獨的標記文件,因爲它帶有
Panel
-approach。
- 您可以直接使用
DropDownChoice
方法。否則,您應該轉發諸如Panel
的方法之類的方法,或者爲DDC實施getter方法。
所以,這將是更好的東西是這樣的:
public class CityDropDownChoice extends DropDownChoice<City> // use your own generic
{
/* define only one constructor, but you can implement another */
public CityDropDownChoice (final String id)
{
super (id);
init();
}
/* private method to construct ddc according to your will */
private void init()
{
setChoices (/* Your cities model or list of cities, fetched from somewhere */);
setChoiceRenderer (/* You can define default choice renderer */);
setOutputMarkupId (true);
/* maybe add some Ajax behaviors */
add(new AjaxEventBehavior ("change")
{
@Override
protected void onEvent (final AjaxRequestTarget target)
{
onChange (target);
}
});
}
/*in some forms you can override this method to do something
when choice is changed*/
protected void onChange (final AjaxRequestTarget target)
{
// override to do something.
}
}
而在你的形式簡單地使用:
Form form = ...;
form.add (new CityDropDownChoice ("cities"));
認爲這種做法將滿足您的需求。
爲了解決這個問題,如果你願意**在你的下拉菜單中想要特殊的標記,那麼'Panel'就是要走的路。 – biziclop 2014-10-28 14:53:54
@biziclop,同意。 – 2014-10-28 15:07:26