2011-09-30 52 views
0

這可能是設計問題,然後是編碼問題。Spring Web Flow - 重用子流的問題

我們有一個現有的訂購界面,我們試圖轉換成Spring Web Flow。對於每種產品,我們都有一些可重複使用的組件,例如聯繫方式,合同細節,訂單詳細信息,定價...

現在我們希望將它們放在單個頁面上,但仍然保持可重複使用,以便可用於不同的產品。

如 - 我有,我有三個不同的組件稱爲服務詳情頁:

Host Details 
    IP Details 
    Backup Details 

每個組件需要在其他產品中重複使用,因此,問題是如何實現這一目標?

問題:如果我創建了一個名爲「Service Details」的子流,那麼相關的視圖必須包含所有三個jsps,並且子流的模型屬性將是一個複合屬性,它必須綁定上述所有值, ,IP詳細信息,備份詳細信息....

我永遠不會重複使用整個頁面,只有組件需要在不同的頁面之間重用。

回答

1

這不是特別針對webflow的 - 您想創建與模型中組件相關的可重用視圖組件?

這是真的,在webflow中,你只能對一個變量作用域中的單個對象進行自動綁定&驗證,所以我建議你創建一個bean來保存這三個組件。

public class Holder implements Serializable { 

     private HostDetails; 
     private IpDetails; 
     private BackupDetails; 

     //getters & setters 
} 

然後,流中的'model'屬性將引用此Holder類的實例。

您只需要記住,如果您想將提交的字段綁定到例如HostDetails,您的輸入應該使用點符號引用字段(包括「保持器」):

<input type="text" name="holder.hostDetails.hostName"/> 

然後,爲了重新使用部件在視圖層,創建一個JSP,其包括其它部件。我喜歡爲此創建.tag文件,一個標記文件負責渲染每個組件。

<%!-- This is the main JSP --%> 

<%!-- Include modules using tag files --%> 
<content:hostDetails details="${holder.hostDetails}" nestedPath="holder.hostDetails"/> 
<content:ipDetails details="${holder.ipDetails}" nestedPath="holder.ipDetails"/> 
<content:backupDetails details="${holder.backupDetails}" nestedPath="holder.backupDetails "/> 

我把「nestedPath」屬性存在使得標籤文件是模塊化的,可重複使用的包括在不同的頁面(即使沒有Holder.class)時也是如此。可能有這樣做有點更優雅的方式......

我沒有在這裏所示的標籤文件實現,但看看這裏:http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags5.html

+0

謝謝,我現在有一點想法怎麼辦呢。我們使用Tiles而不是jsp標記來重用位。如果我們繼續使用瓷磚,你認爲我會撞牆嗎? – V1sh

+0

使用拼貼很好,你可以使用jsp標籤和拼貼相互連接。我傾向於使用視圖組合/佈局(頁面之間一致)和標記文件來封裝公共內容。標記文件有一個明確的'合同'的好處,但你必須深入挖掘一下,以找出渲染一個圖塊需要哪些輸入。 –