最近在研究facelet,發現它還是一個很好用的模版類工具,就像把它和jsf整合來用。但是沒想到我心中對facelet的熊熊烈焰,在我剛走到facelet大門的時候就被撲滅的。剛剛接觸,就被facelet來了一個下馬威。
其實我的流程也很簡單,用myeclipse搭建一個web project,在添加jsf capabilities,用1.5的說明,再把support facelet鉤上環境就搭好了。
創建三個文件:index.jsp, welcome.xhtml,main.xhtml(template)
index.jsp中的內容很簡單就是一句<jsp:forward page="/welcome.faces"></jsp:forward>
welcome.xhtml的內容也很簡單
<ui:composition template="/templates/main.xhtml">
<ui:define name="title">Welcome</ui:define>
<ui:define name="content">Content</ui:define>
</ui:composition>
main.xhtml的內容就是主頁面的佈局
<div id="container">
<div id="header">
<ui:include src="/templates/include/header.xhtml"></ui:include>
</div>
<div id="pageBody">
<div id="leftSideBar">
</div>
<div id="content">
<ui:insert name="content">Content</ui:insert>
</div>
<div id="rightSideBar">
</div>
</div>
<div id="footer">
<ui:include src="/templates/footer.xhtml"></ui:include>
</div>
header.xhtml,footer.xhtml是用myeclipse創建的文件,放在/templates/include/下面。裏面的內容完全沒有改動過。所有這些都是很簡單的內容,但是一運行就會出現以下錯誤
HTTP Status 404 - /jsfproject/welcome.faces
type Status report
message /jsfproject/welcome.faces
description The requested resource (/jsfproject/welcome.faces) is not available.
在網上查了很多資料都說是找不到這個文件,經過兩天的研究,看了網上給的例子,和同事做的例子(他做的完全可以運行,除了頁面內容以外什麼配置都一樣),纔有點結果,明白了爲什麼。
是實際上可能你也看出來了,上面代碼裏面header.xhtml,footer.xhtml放在同一個目錄下面,但是兩個include的src內容卻不一樣(這裏這麼明顯是爲了舉例,當時就算是這麼明顯也沒看到,一直以爲是自己的環境配置有問題),這個就是問題,因爲其中一個文件連接不對,只要把它該對就不會有錯了。
通過對這個問題的研究,收穫就是not available 可以代表(1)文件不存在,在環境中找不到(2)文件存在但是裏面包含一些信息導致這個文件不可用。