簡答:是的,你必須添加它們。
長答案:您可以創建自定義代碼來做到這一點,但我懷疑這是值得的努力。
使用JSF,您可以使用非HTML標籤,該標籤具有與其關聯的一種組件類型 - 例如,h:inputText
對應於類HtmlInputText
- ,因此它知道要實例化的類。
使用Wicket,HTML文件僅包含(有一些例外)HTML標籤,並且您必須實例化每個標記爲標記的標記的具體組件,因爲它不能確切地知道是否<span wicket:id='xyz'>
表示Label
,FeedbackPanel
,WebMarkupContainer
或某個自定義組件。
通過JSF,您可以在標記中做什麼,使用Wicket,您可以在Java代碼中執行哪些操作,即構建組件樹,將組件綁定到屬性以及處理事件。它將所有內容保存在一個文件中(你不必爲每個模板文件創建一個類),它有很多很多缺點(有些人可能認爲它有一些優點,我會離題)。
你的頁面永遠不是一個簡單的表單,它什麼都不做。您想要轉換和驗證輸入,您想要處理提交,您想要使用Ajax更新組件。使用JSF,您可以在(不可編譯的,類型不安全的,糟糕的,不可重構的)模板中執行所有這些操作,使其充滿了表達式,配置標籤和 - gawd禁止 - 業務邏輯。
如果Wicket對此有支持(並且對於您自己構建此附加組件需要具備靈活性),則必須添加大量額外的註釋(特殊的非標準標籤和屬性),聲明要實例化的類,要更新的模型,要執行的驗證等等,折中框架的兩個優點,乾淨的HTML模板以及視覺和邏輯之間的清晰分離。
一個框架,試圖在模板中做更多的事情,同時保持比JSF更臃腫(反正不是那麼難)是Apache Tapestry。但是從its tutorial中可以看出,您仍然不得不使用非標準標籤,並遵循任意約定將模板綁定到代碼上(您可能會喜歡它,但是如果出現這種情況,您可以嘗試使用Baaad,對不起:P )。
這是一個很好的答案,並解釋了很多。我可能會重新思考我是如何處理我的問題的,似乎我正在使用wicket,因爲我會使用JSF,而且成本並未使用任何一方的強項。 – Sean 2012-08-21 13:06:59