2011-10-18 17 views
2

我想實現一個表單,我可以重新使用它來添加或編輯一個對象。我注意到,如果我定義了一個擴展Form的類,我必須爲創建此表單的實例的頁面的HTML中的所有表單組件聲明標記。是否有可能在門票中包含自定義窗體的標記?

我試過在自己的包中放置一個對應的HTML文件和我的自定義Form類,但它沒有提到HTML隨Java類一起提供的事實。

基本上我希望窗體看起來完全一樣,但只是爲了能夠覆蓋窗體的onSubmit方法,所以我可以在調用窗體的setResponsePage時使用不同的值。

回答

6

Wicket的Form不支持與許多其他檢票組件類所對應的標記對齊的相同模式。

當我想要做這樣的事情時,我將表單封裝在Panel子類中,將表單標記放在該類的相應標記中,然後可以將面板包含在多個頁面中而不必重複標記。

如果您有多個具有相同標記的表單,您也可以將表單本身作爲參數傳遞給面板,或者在面板代碼中具有決定要使用哪個變體的邏輯。

您的特定目的的另一種可能性是傳遞響應頁面作爲創建表單的參數,然後如果這是唯一區別,則不需要創建兩個表單。

+0

+1這是個好建議。唯一可能會改變的部分是最後一個建議。讓小組決定如何處理提交(或如何查找響應頁面)並讓使用面板的組件覆蓋它可能會更輕鬆/更輕鬆。 –

+0

@Xavi - 的確,如果窗體是面板中的內部類,這很容易。 –

2

只需添加到@DonRoby 's fine comments,你可以看看它是這樣的:

  • 只能用於擴展Page,或者WebMarkupContainerWithAssociatedMarkup,如PanelBorderFragment這些類提供標記。
  • 其他類,如TextFieldForm只是通過它們的onComponentTag(),onComponentTagBody()方法和其他方法輸出它們的標記可能基於實例的狀態。 TextField輸出<input ...>Form輸出<form ....> _formbody_ </form>

正如Don已經指出的那樣,要走的路是將Form嵌入Panel。您始終可以將Form.onSubmit()委託給包裝Panel中的自定義方法,並根據需要覆蓋它。

相關問題