2012-07-13 71 views
3

問題:我有兩個相同的頁面home.jspcontact.jsp具有相同的結構。它們僅在正文內容和標題上有所不同。我想使用tiles框架創建佈局頁面,並重用兩個JSP的代碼。控制器框架尚未確定,它可能是Spring MVC 3Struts 2其中哪一個是使用瓦片的更好方法

解決方案A:直接從控制器/操作類調用JSP文件/視圖。

我寫一個定義tiles.xml,如:

<definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayout.jsp"> 
    <put-attribute name="title" value="" /> 
    <put-attribute name="header" value="/WEB-INF/jsp/includes/header.jsp"/> 
    <put-attribute name="body" value="" /> 
</definition> 

現在baseLayout.jsp

<html> 
    <head><title><tiles:insertAttribute name="title"/></title></head> 
    <body> 
     <div class="wrapper"> 
      <div class="header"><tiles:insertAttribute name="header"/></div> 
      <div class="body"><tiles:insertAttribute name="body"/></div> 
     </div> 
    </body> 
</html> 

現在home.jsp

<tiles:insertDefinition name="baseLayout"> 
    <tiles:putAttribute name="title"> 
     Title for home page 
    </tiles:putAttribute> 
    <tiles:putAttribute name="body"> 
     Content for home page 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

同樣,對於contact.jsp

<tiles:insertDefinition name="baseLayout"> 
    <tiles:putAttribute name="title"> 
     Title for contact page 
    </tiles:putAttribute> 
    <tiles:putAttribute name="body"> 
     Content for contact page 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

溶液B:調用的不同JSP文件tiles definition從cotrollers /動作類。這種方法需要一個tiles definition我將寫的每個JSP文件。所以總共有3個磁貼定義(一個用於baseLayout,另外兩個用於homecontact)。

tiles.xml:

<definition name="baseLayout" template="/WEB-INF/jsp/layout/baseLayout.jsp"> 
    <put-attribute name="title" value="" /> 
    <put-attribute name="header" value="/WEB-INF/jsp/includes/header.jsp"/> 
    <put-attribute name="body" value="" /> 
</definition> 

<definition name="home" extends="baseLayout"> 
    <put-attribute name="title" value="Title for home page" /> 
    <put-attribute name="header" value="/WEB-INF/jsp/home.jsp"/> 
</definition> 
<definition name="contact" extends="baseLayout"> 
    <put-attribute name="title" value="Title for contact page" /> 
    <put-attribute name="header" value="/WEB-INF/jsp/contact.jsp"/> 
</definition> 

baseLayout.jsp:Same as **Solution A**

回到Home.jsp:Content for home page

contact.jsp:Content for contact page


我想上的建議上述方法之一我應該勾選即可。

回答

1

解決方案B是實現最好的辦法,

  • ,你將有個人風格的模板,如果需要其他JSP的不搞亂代碼在JSP像A溶液以後可以重用什麼

  • 作爲了解第二種方法更加清晰和共同的標準可循。

3

第二個解決方案是最好的方法:

  • 你可以爲每個 jsp佈局在tiles性質的獨立部分。
  • 您可以隨時更改,恕不在struts

首先解決方案將在後面使用

  • 最傳統的方式影響其他佈局:

    • 可能以後會出現問題與具有任何對其進行編輯改變 特別是當你在先進水平
    • 更通用的方法不適合支柱項目深/磚建築 個設計
  • 0

    解決方案A通過分發配置和通過顯式配置促進名稱約定,幫助在大型應用程序中維護。此外,它是與其他模板解決方案,如JSF或純標籤概念兼容。例如看到這一點:JSP tricks to make templating easier?

    認爲應用程序中使用數百個控制器和視圖由不同的人在一個大的時期寫的。使用解決方案B,您將不得不面對一個巨大的tiles.xml文件。添加一個輕微的缺乏紀律和視圖名稱的最終配置(如你的例子)內部的不一致的混亂和內容存在。

    相關問題