如果你還不知道Tiles是什麼
這篇文章對你沒有意義
如果你不了解JSF
那你看這篇文章是在浪費時間
如果你正在為怎麼在JSF裡面用Tiles發愁
This is what u want!!!!!!
可能有人會問
為什麼用tiles?為什麼用JSF
不用Struts?
如果你對tiles在struts中的應用了如指掌
那你不會問第一個問題
同樣
如果你用過JSF
我相信你會在以後的項目中優先考慮JSF而不是Struts
(其實我比較贊成Struts和JSF的互補
他們各有各的優勢
Struts強大的邏輯控制使它更適合於表示邏輯簡單而控制邏輯復雜的系統
而JSF在view層次的表現力同樣是驚人的
建議去看看David Geary的帖子
Top Ten Reasons to Prefer JSF over Struts
)
好了
廢話不說了
來看看Tiles是怎樣融合到JSF裡面的
注意
JSF的配置我不多講
如果你JSF都不知道怎麼運轉
那就不要浪費時間了
把Struts裡面的strutsjar考到lib目錄下面 在webxml裡面加上下面配置 <servlet>
<servlet
name>Faces Servlet</servlet
name>
<servlet
class>javax
faces
webapp
FacesServlet</servlet
class>
<load
on
startup>
</load
on
startup>
</servlet>
<servlet>
<servlet
name>TilesServet</servlet
name>
<servlet
class>org
apache
struts
tiles
TilesServlet</servlet
class>
<init
param>
<param
name>definitions
config</param
name>
<param
value>/WEB
INF/tiles
defs
xml</param
value>
</init
param>
<init
param>
<param
name>definitions
parser
validate</param
name>
<param
value>true</param
value>
</init
param>
<load
on
startup>
</load
on
startup>
</servlet>
藍色部分是你要加的
注意上面的servlet的load順序
添加tilesdefsxml到/WEBINF/下面這個配置文件和以前在struts裡面的沒有差別一個典型的配置如下 <!DOCTYPE tiles
definitions PUBLIC
//Apache Software Foundation//DTD Tiles Configuration//EN
config
dtd
>
<tiles
definitions>
<definition name=
report
main
path=
/JSPROOT/templates/topLayout
jsp
>
<put name=
header
value=
/JSPROOT/templates/header
jsp
></put>
<put name=
menu
value=
/JSPROOT/templates/menu
jsp
></put>
<put name=
footer
value=
/JSPROOT/templates/footer
jsp
></put>
<put name=
body
value=
/JSPROOT/reports/report_main
jsp
></put>
</definition>
<definition name=
report
summary
extends=
report
main
>
<put name=
body
value=
/JSPROOT/reports/summary_report
jsp
type=
page
></put>
</definition>
</tiles
definitions>
上面定義了
個view
一個report
main
一個report
summary
然後和原來一樣編寫你自己的layout文件及headerfooter等典型的一個layout如下 <%@taglib uri=
tiles
prefix=
tiles
%>
<html>
<head>
<title>
<tiles:getAsString name=
header
/>
</title>
</head>
<body bgcolor=
#ffffff
topmargin=
leftmargin=
marginwidth=
marginheight=
onKeyPress=
return killEnt();
>
<table width=
%
border=
cellpadding=
cellspacing=
>
<tr>
<td colspan=
align=
justify
>
<tiles:insert attribute=
header
flush=
false
ignore=
false
> </tiles:insert>
</td>
</tr>
<tr>
<td colspan=
bgcolor=
#
align=
right
>
</td>
</tr>
<tr height=
>
<td bgcolor=
#
D
align=
Left
valign=
Top
width=
%
>
<tiles:insert attribute=
menu
flush=
false
ignore=
false
> </tiles:insert>
</td>
<td width=
%
>
<table width=
%
>
<tr>
<td >
<tiles:insert attribute=
body
flush=
false
ignore=
false
> </tiles:insert>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<tiles:insert attribute=
footer
flush=
false
ignore=
false
> </tiles:insert>
</td>
</tr>
</table>
</body>
</html>
注意
一定不能在f:view裡面套f:view
也就是說你在layout
jsp不要用到JSF的標簽來產生一些業務邏輯
實際上我們主要的邏輯也是在body裡面實現的
在layout裡面主要是定義一些文字
圖片什麼的
同樣在header
jsp
footer
jsp
menu
jsp裡面也只寫html代碼
不要用JSF標簽
編寫兩個jsp文件like this main_t
jsp:
<%@ taglib uri=
tiles
prefix=
tiles
%>
<tiles:insert definition=
report
main
>
</tiles:insert>
summary_t
jsp:
<%@ taglib uri=
tiles
prefix=
tiles
%>
<tiles:insert definition=
report
summary
>
</tiles:insert>
這一步是關鍵
如果理解到了這裡
那你就可以輕松把tiles和jsf結合起來
原來在Struts我們配置的forward對象可以直接是tiles
defs
xml裡面的一個view
但是在JSF裡面不行
這裡的navigation必須是定義到一個jsp文件
所以我們只有在這個文件裡面再來插入tiles裡面所定義的view
這樣的壞處就是我們在tiles
defs裡面定義的每一個view都必須有一個對應的想上面一樣的jsp文件
而且在JSF裡面配的navigation都必須是基於這個文件到的
注意
不只是to
view
id
from
view
id也必須是對應上面的這種文件
不能是body的jsp文件(不懂可以看第
步的配置)
如果你都理解了你可以不往下看了下面是為了上面的例子更完整而做的剩余步驟 編寫一個indexjsp <html>
<head>
<title>
index
</title>
</head>
<body bgcolor=
#ffffff
>
<jsp:forward page=
main_t
faces
> //對應到上面第
步的文件
<jsp:param name=
value=
/>
</jsp:forward>
</body>
</html>
編寫個tilesdefsxml裡面定義的body的jsp文件 report_main
jsp:
<%@taglib uri=
prefix=
f
%>
<%@taglib uri=
prefix=
h
%>
<html>
<head>
<title>main</title>
<link rel=
stylesheet
type=
text/css
/>
</head>
<body bgcolor=
#ffffff
>
<h
align=
center
class=
header
>Report</h
>
<f:view>
<h:form>
<p>
<h:commandButton action=
summary
value=
Summary Report
styleClass=
button
> </h:commandButton>
<h:commandButton type=
reset
value=
Clear
styleClass=
button
> </h:commandButton>
</p>
</h:form>
</f:view>
</body>
</html>
summary_report
jsp
<%@taglib uri=
prefix=
f
%>
<%@taglib uri=
prefix=
h
%>
<html>
<head>
<title>main</title>
<link rel=
stylesheet
type=
text/css
/>
</head>
<body bgcolor=
#ffffff
>
<h
align=
center
class=
header
>Summary Report</h
>
</body>
</html>
配置faceconfigxml <navigation
rule>
<from
view
id>/JSPROOT/reports/main_t
jsp (注意
不是report_main
jsp
這樣在有的IDE裡面可能會報report_main
jsp有錯
比如JB
不用管它)</from
view
id>
<navigation
case>
<from
outcome>summary</from
outcome>
<to
view
id>/JSPROOT/reports/summary_t
jsp (不是summary_report
jsp)</to
view
id>
</navigation
case>
</navigation
rule>
好了
所有工
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27040.html