我想實現一個表單,我可以重新使用它來添加或編輯一個對象。我注意到,如果我定義了一個擴展Form的類,我必須爲創建此表單的實例的頁面的HTML中的所有表單組件聲明標記。是否有可能在門票中包含自定義窗體的標記?
我試過在自己的包中放置一個對應的HTML文件和我的自定義Form類,但它沒有提到HTML隨Java類一起提供的事實。
基本上我希望窗體看起來完全一樣,但只是爲了能夠覆蓋窗體的onSubmit方法,所以我可以在調用窗體的setResponsePage時使用不同的值。
我想實現一個表單,我可以重新使用它來添加或編輯一個對象。我注意到,如果我定義了一個擴展Form的類,我必須爲創建此表單的實例的頁面的HTML中的所有表單組件聲明標記。是否有可能在門票中包含自定義窗體的標記?
我試過在自己的包中放置一個對應的HTML文件和我的自定義Form類,但它沒有提到HTML隨Java類一起提供的事實。
基本上我希望窗體看起來完全一樣,但只是爲了能夠覆蓋窗體的onSubmit方法,所以我可以在調用窗體的setResponsePage時使用不同的值。
Wicket的Form
不支持與許多其他檢票組件類所對應的標記對齊的相同模式。
當我想要做這樣的事情時,我將表單封裝在Panel
子類中,將表單標記放在該類的相應標記中,然後可以將面板包含在多個頁面中而不必重複標記。
如果您有多個具有相同標記的表單,您也可以將表單本身作爲參數傳遞給面板,或者在面板代碼中具有決定要使用哪個變體的邏輯。
您的特定目的的另一種可能性是傳遞響應頁面作爲創建表單的參數,然後如果這是唯一區別,則不需要創建兩個表單。
只需添加到@DonRoby 's fine comments,你可以看看它是這樣的:
Page
,或者WebMarkupContainerWithAssociatedMarkup
,如Panel
,Border
,Fragment
這些類提供標記。TextField
或Form
只是通過它們的onComponentTag()
,onComponentTagBody()
方法和其他方法輸出它們的標記可能基於實例的狀態。 TextField
輸出<input ...>
和Form
輸出<form ....> _formbody_ </form>
。正如Don已經指出的那樣,要走的路是將Form
嵌入Panel
。您始終可以將Form.onSubmit()
委託給包裝Panel
中的自定義方法,並根據需要覆蓋它。
+1這是個好建議。唯一可能會改變的部分是最後一個建議。讓小組決定如何處理提交(或如何查找響應頁面)並讓使用面板的組件覆蓋它可能會更輕鬆/更輕鬆。 –
@Xavi - 的確,如果窗體是面板中的內部類,這很容易。 –