2012-08-15 43 views
2

我正在嘗試使用wicket構建一個簡單的應用程序,並且至今留下了深刻的印象。我一直利用Component類來根據用戶輸入或模型來確定頁面上元素的行爲。我看到了與JSF的組件模型相似之處,但發現了更易於管理的Wicket生命週期。Wicket Components - 必須每次添加()?

我無法理解的是,必須將每個組件的每個組件添加到樹中:id在頁面上提到,特別是對於沒有任何子級的組件。當樹已經在標記中被定義時,它似乎被強制在java代碼中建立樹。我錯過了什麼?

編輯

我應該舉一個例子。我有一個輸入框的標籤,在某些情況下,我希望能夠修改。 95%的時間文本和屬性我在標記中的標籤將罰款。

回答

8

簡答:是的,你必須添加它們。

長答案:您可以創建自定義代碼來做到這一點,但我懷疑這是值得的努力。

使用JSF,您可以使用非HTML標籤,該標籤具有與其關聯的一種組件類型 - 例如,h:inputText對應於類HtmlInputText - ,因此它知道要實例化的類。

使用Wicket,HTML文件僅包含(有一些例外)HTML標籤,並且您必須實例化每個標記爲標記的標記的具體組件,因爲它不能確切地知道是否<span wicket:id='xyz'>表示LabelFeedbackPanelWebMarkupContainer或某個自定義組件。

通過JSF,您可以在標記中做什麼,使用Wicket,您可以在Java代碼中執行哪些操作,即構建組件樹,將組件綁定到屬性以及處理事件。它將所有內容保存在一個文件中(你不必爲每個模板文件創建一個類),它有很多很多缺點(有些人可能認爲它有一些優點,我會離題)。

你的頁面永遠不是一個簡單的表單,它什麼都不做。您想要轉換和驗證輸入,您想要處理提交,您想要使用Ajax更新組件。使用JSF,您可以在(不可編譯的,類型不安全的,糟糕的,不可重構的)模板中執行所有這些操作,使其充滿了表達式,配置標籤​​和 - gawd禁止 - 業務邏輯。

如果Wicket對此有支持(並且對於您自己構建此附加組件需要具備靈活性),則必須添加大量額外的註釋(特殊的非標準標籤和屬性),聲明要實例化的類,要更新的模型,要執行的驗證等等,折中框架的兩個優點,乾淨的HTML模板以及視覺和邏輯之間的清晰分離。

一個框架,試圖在模板中做更多的事情,同時保持比JSF更臃腫(反正不是那麼難)是Apache Tapestry。但是從its tutorial中可以看出,您仍然不得不使用非標準標籤,並遵循任意約定將模板綁定到代碼上(您可能會喜歡它,但是如果出現這種情況,您可以嘗試使用Baaad,對不起:P )。

+0

這是一個很好的答案,並解釋了很多。我可能會重新思考我是如何處理我的問題的,似乎我正在使用wicket,因爲我會使用JSF,而且成本並未使用任何一方的強項。 – Sean 2012-08-21 13:06:59

0

我有一個輸入框的標籤,在某些情況下,我希望能夠修改。 95%的時間文本和屬性我在標記中的標籤將罰款。

您可以嘗試在模型中包裝標籤的內容,將該標籤包含在容器中並重新繪製容器(target.add(container);)。

0

離開你應該添加他們。檢票功能最強大的功能之一是允許你製作一個可重用的組件,尤其是html組件。

有蓋房一百萬的方式,但大多數人不會考慮 建築馬桶,浴缸,並從頭玻璃窗。 爲什麼要自己建造一個廁所,當你可以購買一個比你購買一個廁所花費更少的錢時,你會花費你去建造一個廁所,當它不太可能你會比你在一家商店買到更好的產品嗎?以同樣的方式,大多數軟件工程師試圖重複使用軟件模塊。 「製造或購買」決定涵蓋的不僅僅是模塊是否可用;一般而言,重複使用軟件模塊更便宜,並且導致更強大的系統。 。重用軟件也意味着你不必一遍又一遍代碼的 相同的功能(檢票行動:曼寧)

所以有一個可重複使用的Wicket頁面,檢票口只需要一個HTML頁面顯示它的組件層次結構或它們的位置。這些組件的類型和型號留給程序員。

+0

不錯的答案兄弟 – uma 2013-11-27 07:00:03

相關問題