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