在我的项目中,我有50多个表单,它们大多是彼此相似的,并且使用相同的DropDownChoice
组件。我可以创建单独的Panel
,我在其中定义我的DropDownChoice
,之后我将以另一种形式使用Panel
吗?否则,我如何实现这种情况?
例如
form1
有下一个字段:
的名称(TextField
)
的姓(TextField
)
的城市(DropDownChoice
)
form2
有下一个字段:
的代码(TextField
)
的量(TextField
)
城市(同样是DropDownChoice
)
我想为这种方法做出漂亮的解决方案。
答案 0 :(得分:5)
最好使用预定义参数扩展DropDownChoice
,而不是使用真实Panel
扩展DropDownChoice
。
这种方法至少有两个优点:
Panel
- 方法。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" ) );
认为这种方法符合您的需求。