我正在尝试实现一个可以重复用于添加或编辑对象的表单。我注意到,如果我定义一个扩展Form的类,我必须为我正在创建此表单实例的页面的HTML中的所有表单组件声明标记。
我已尝试在其包中放置一个带有我的自定义Form类的相应HTML文件,但它没有注意到HTML与Java类一起使用的事实。
基本上我希望表单看起来完全一样,但只是为了能够覆盖表单的onSubmit方法,这样当我为表单调用setResponsePage时我可以使用不同的值。
答案 0 :(得分:6)
Wicket的Form
不支持与许多其他wicket组件类所做的相应标记对齐的相同模式。
当我想做这样的事情时,我将表单包装在Panel
子类中,将表单标记放在该类的相应标记中,然后可以将该面板包含在多个页面中而不必复制标记。
如果您有多个具有相同标记的表单,您也可以将表单本身作为参数传递到面板中,或者在面板代码中使用逻辑来决定使用哪个变体。
您的特定目的的另一种可能性是将响应页面作为创建表单的参数传递,然后如果这是唯一的区别,则不需要创建两个表单。
答案 1 :(得分:2)
只需添加到@DonRoby 's fine comments,您就可以这样看待它:
Page
或WebMarkupContainerWithAssociatedMarkup
的类提供标记,例如Panel
,Border
,Fragment
。TextField
或Form
可能只是根据实例的状态,通过onComponentTag()
,onComponentTagBody()
方法和其他类输出标记。 TextField
输出<input ...>
和Form
输出<form ....> _formbody_ </form>
。正如唐已经指出的,要走的路是将Form
嵌入Panel
。您始终可以将Form.onSubmit()
委托给自定义方法Panel
,并根据需要覆盖它。