堅(jiān)持走自己的路……
一、SiteMesh項(xiàng)目簡介
?????
??? ??? 注意過濾器的位置:應(yīng)該在struts2的org.apache.struts2.dispatcher.FilterDispatcher過濾器之前org.apache.struts2.dispatcher.ActionContextCleanUp過濾器之后,否則會(huì)有問題;??????4、在下載的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目錄下就有)
??? ??? 將其拷貝到/WEB-INF目錄下;??????5、在sitemesh.xml文件中有一個(gè)property結(jié)點(diǎn)(如下),該結(jié)點(diǎn)指定了decorators.xml在工程中的位置,讓sitemesh.xml能找到他;按照此路徑新建decorators.xml文件,當(dāng)然這個(gè)路徑你可以任意改變,只要property結(jié)點(diǎn)的value值與其匹配就行;
???????? 6、在WebRoot目錄下新建decorators目錄,并在該目錄下新建一個(gè)模板jsp,根據(jù)具體項(xiàng)目風(fēng)格編輯該模板,如下示例:我的模板:main.jsp
這就是個(gè)簡單的模板,頁面的頭和腳都由模板里的靜態(tài)HTML決定了,主頁面區(qū)域用的是<decorator:body />標(biāo)簽;也就是說凡是能進(jìn)入過濾器的請求生成的頁面都會(huì)默認(rèn)加上模板上的頭和腳,然后頁面自身的內(nèi)容將自動(dòng)放到<decorator:body />標(biāo)簽所在位置;<decorator:title?default="Welcome?to?test?sitemesh!"?/>:讀取被裝飾頁面的標(biāo)題,并給出了默認(rèn)標(biāo)題。<decorator:head?/>:讀取被裝飾頁面的<head>中的內(nèi)容;<decorator:body?/>:讀取被裝飾頁面的<body>中的內(nèi)容;?????7、說到這里大家就要想了,那如果某個(gè)特殊的需求請求路徑在過濾器的范圍內(nèi),但又不想使用模板怎么辦?你總不能這么不講道理吧!????????大家放心吧,SiteMesh早就考慮到這一點(diǎn)了,上面第5步說道的decorators.xml這個(gè)時(shí)候就起到作用了!????????下面是我的decorators.xml:
decorators.xml有兩個(gè)主要的結(jié)點(diǎn):??????decorator結(jié)點(diǎn)指定了模板的位置和文件名,通過pattern來指定哪些路徑引用哪個(gè)模板??????excludes結(jié)點(diǎn)則指定了哪些路徑的請求不使用任何模板如上面代碼,/index.jsp和凡是以/login/開頭的請求路徑一律不使用模板;另外還有一點(diǎn)要注意的是:decorators結(jié)點(diǎn)的defaultdir屬性指定了模板文件存放的目錄;六、實(shí)戰(zhàn)感受?????剛剛做完一個(gè)用到sitemesh的項(xiàng)目,跟以前用tiles框架相比,最大的感受就是簡單,系統(tǒng)設(shè)計(jì)階段就把模板文件和sitemesh框架搭好了!哪些頁面使用框架哪些不使用,全部都通過UI Demo很快就定義出來了;在接下來的開發(fā)中所有成員幾乎感受不到sitemesh的存在,各自僅僅關(guān)心自己的模塊功能實(shí)現(xiàn);
Copyright @ kangxm Powered by: .Text and ASP.NET Theme by: .NET Monster