假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...
使用Netbeans开发Seam应用(一)
查看( 18 ) /
评论( 0 )
Seam是一个挺不错的框架,但是用netbeans来开发它,却有点难度,因为目前netbeans没有seam插件,不像Eclipse有jboss 提供的官方插件,但是插件是死的,人是活的,它要能跑起起来,一定有它的配置,下面我们就用netbeans做为IDE来开发一个seam的应用.ITPUB个人空间n:|CNaM9PY
ITPUB个人空间7w9@4J+e"M&{!X0x(gl
当然,我们还有另外一个方法,那就是利用seam自带的seam-gen工具,生成一个工程的框架,然后可以用netbeans打开,但是有一些不太好的地方,那就是所有的工程内容都混到一起去了,WEB的工程和EJB的工程都在同一个工程下面,并且由于是基于ant的,所以工程的目录看得可能不太习惯. 但它也有一个好处,那就是它会为你生成各种必须的配置文件,而不需要手工的编写,但是它的坏处就是,如果你后面想要添加EJB或者添加网页内容,就不太方便了,因为目录的组织是怪怪的,不是标准的Netbeans工程组织方式,所以我还是觉得自己建标准的netbeans工程,然后手工添加这些配置文件, 并且这些配置文件也不一定需要自己全部手工编写,完全可以复制过来,然后在一些细节的地方改动一下就可以了.并且配置好以后,要添加工程内容,就可以完全按照netbeans标准工程的方式来添加了.ITPUB个人空间mG+B2i$D
fZh$u iD0 由于自己也是前几天接触的seam,所以错误之处难免,还望大家指出.
0Qtw:W1k(|CU0 ITPUB个人空间+Q2cf2\&d7}? V [
首先我们说一说周边的东西,那就是要添加哪些配置文件,配置文件大概是什么内容,以及各个工程都需要哪些库,这些是基础,也是很重要的,否则布署工程的时候就会出现一大堆的错误.
_k2yOm4S0 在正式工作之前,先准备好要用到的工具,我这里的工具列表如下:ITPUB个人空间;@XZ7MlY W&P
1,Netbeans6.1,可以到http://www.netbeans.org下载,下载的时候,选择下载全部的版本,也就是最大的那个版本.ITPUB个人空间8ICj!{~T
2,Jboss-4.2.2.GA,可以到http://www.jboss.org下载.
/v|,g)x+w?G`0 3,Jboss-seam-2.0.1.GA,也可以到http://www.jboss.org下载ITPUB个人空间Pa7~r'T.t(p
以上具体地址我就不给了,可以自己到首页上去找,这个应该不难吧.
-}f1ZL:V w9L ^0 至于richfaces就不用准备了,seam里面都带了,什么spring,hibernate等等,它里面都有自带.ITPUB个人空间H,? D7M0_"[
2fg%UIt0 本文的流程如下,先是大概介绍每个工程的配置文件有哪些,以及它们需要哪些库文件,然后才真正写一个示例程序,所以前面的配置文件内容仅供参考,让我们知道,里面包括了哪些元素,因为实际的工程和它不一定是一样的.ITPUB个人空间1u @$w1v"U4T2Ie
ITPUB个人空间#k^rA8Ogi4V4E H'?
准备工作做好以后,就可以开始了,打开我们熟悉的Netbeans,选择新建工程,然后选择新建Web工程,在建WEB工程的时候, 不要选择使用任何框架,因为现在还没有seam的netbeans插件,所以,一切的配置都得靠手写.建好了WEB工程以后,在WEB-INF文件夹下面添加如下文
ages.xml,components.xml,faces-config.xml,而web.xml是我们本来就有的,但是我们要修改一下里面的内容,好让它可以配合seam框架运行.更改好的web.xml内容大致如下:
;b ^bYe8H0 如果你的WEB容器支持JAVAEE5,则下面的web-app version就可以等于2.5了,如果是支持J2EE1.4的,那么就要把它改成2.4的版本,建议是利用netbeans生成的web.xml基础上改,也就是只改内容,而不改xml的头部说明,也就是下面的web-app部份,一般不要去改,我们只改动里面的元素而已.ITPUB个人空间#v)V!w5d)hAz
<?xml version="1.0" encoding="UTF-8"?>ITPUB个人空间7T S'_4z Q@Sf
<web-app version="2.5"ITPUB个人空间s [.k,v7Z S aj
xmlns="http://java.sun.com/xml/ns/javaee"ITPUB个人空间T!tE4[;D]Sa5?
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
ho;r [z~0 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
(Sf0eh6m4mDqmp0 ITPUB个人空间;[1_,WZ8U
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
4A0B't%@a1e?0
+Lt(R"`W-lDG9i+}0 <display-name>Test</display-name>ITPUB个人空间(v!IcyeJB
ITPUB个人空间1c#qZ S'I0C"^v }a
<!-- Seam -->
esO,} W0 ITPUB个人空间:F7Qxy*o&DK5G_F
<listener>
x~(h(s N&R1T/\0 <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
8c%BT6Kk4x#Y~0 </listener>ITPUB个人空间,R5P0hD)d%v
ITPUB个人空间%W6fir+n
<servlet>ITPUB个人空间G]9cn.\Zay.Q
<servlet-name>Seam Resource Servlet</servlet-name>
+`$d*M ?D,g)A1X0 <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>ITPUB个人空间Ik$\[cO
</servlet>ITPUB个人空间\/V6DvI#MU
ITPUB个人空间T fYo^1GXN+jQ
<servlet-mapping>ITPUB个人空间.d~!i{(op"F
<servlet-name>Seam Resource Servlet</servlet-name>ITPUB个人空间.|9S5d;{d4LZ;d[ GJt
<url-pattern>/seam/resource/*</url-pattern>ITPUB个人空间yG3S,|} pO
</servlet-mapping>ITPUB个人空间cb.g V6VlF wS
ITPUB个人空间#L ua6N*Q4o,q
<filter>
*@gV%d5S,\)e|$d.m0 <filter-name>Seam Filter</filter-name>
._X w:jE6T0 <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
e]o$uLA0 </filter>
1H:H^\1I;LJ\N N0 ITPUB个人空间 gl4S/n])l7p${L
<filter-mapping>ITPUB个人空间 Zaf]j![|.X
<filter-name>Seam Filter</filter-name>ITPUB个人空间({Yy*_Jk+y
<url-pattern>/*</url-pattern>
sA'm'k/IJ3LZ0 </filter-mapping>ITPUB个人空间[9E]!]R$s
*l MY8h mgy2{O0 <!-- 这里用了facelets的技术,我们的例子里面没有用到 -->
2Z x rq*h$J0 ITPUB个人空间c,KE0D0Lnv
<context-param>ITPUB个人空间/[e.d#c9sU dr
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
/e`[.sd;Y9Q0e9N0 <param-value>.xhtml</param-value>
!u8J9@ O)_)V(x7T0 </context-param>
S@e4bqs(P1e0 ITPUB个人空间T]N3\e.w
<context-param>
.m4[Z(v'o [qB0 <param-name>
)T U2V)? K-LX)N0 javax.faces.STATE_SAVING_METHODITPUB个人空间%P"s4m2O0o
</param-name>
}${ Xy/{+Im0 <param-value>server</param-value>
4Yx9d0jw0 </context-param>
6n:X[3zo$m m:L1}$W0 ITPUB个人空间 J0r'u(w"A4O$~Q\
<context-param>ITPUB个人空间 o\7}~,z%m+y!iF
<param-name>facelets.DEVELOPMENT</param-name>
+U9K#i3C uor0 <param-value>true</param-value>
9[0\Z?"h0 </context-param>ITPUB个人空间$r5\7l#w#Rs{%z;Q1v
ITPUB个人空间Z:F+Y7q)b.Q@'s3ns*B
<servlet>
BI5F\p\$t0 <servlet-name>Faces Servlet</servlet-name>
-q HUnT d0 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
8d8yxdkg1W$L$I.Es0 <load-on-startup>1</load-on-startup>
AW+t!Q)[U'`Gy.t:@A"[0 </servlet>
T5h@b(v3?Uc0
VV)SA2s _0 <servlet-mapping>ITPUB个人空间"kg1vXra
<servlet-name>Faces Servlet</servlet-name>
Q+TU3F$S P0 <url-pattern>*.seam</url-pattern>ITPUB个人空间)X|3I_Vhz
</servlet-mapping>ITPUB个人空间"S"usy%g Oq'jE"X
ITPUB个人空间6sH(g"GqI!x'A?
<session-config>
,j*MTF3m.]$X8E0 <session-timeout>10</session-timeout>
;SE l c4KY0 </session-config>
d7L rPM0~p0 ITPUB个人空间 W*sg1h!?q?z
</web-app>
%ceK4[xI9Iw&Lf0
:s)_^i.G-Y;J!Ywy;X0 在添加其它三个文件的内容之前,先说一下那三个文件是干什么用的,首先components.xml,这个文件里面写的是seam组件的配置,它是必不可少的,一般来说,它可以放在很多地方,但是最好还是放在WEB-INF下面,下面来看看它里面的内容:ITPUB个人空间.al tJ8x{
uU S3w^0 <?xml version="1.0" encoding="UTF-8"?>ITPUB个人空间2j'mUQF9~Y&_4\M
<components xmlns="http://jboss.com/products/seam/components"ITPUB个人空间![ sGe%U/T
xmlns:core="http://jboss.com/products/seam/core"
+x2zh X6M8ZZ0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
_ oM1O~6q%Y)q0 xsi:schemaLocation=
-c:B GXat0 "http://jboss.com/products/seam/coreITPUB个人空间F!Dd:H2d*gS1h D
http://jboss.com/products/seam/core-2.0.xsdITPUB个人空间'z:\)[$g/F
http://jboss.com/products/seam/componentsITPUB个人空间+K;L1Zrz&n8s/i
http://jboss.com/products/seam/components-2.0.xsd">
H#sh^.@U5S4C(^0 <core:init jndi-pattern="Seam6/#{ejbName}/local" debug="true"/>ITPUB个人空间BRd#Kt*g9c7P]
<core:manager conversation-timeout="120000"/>
i9C;E!HeP0 </components>ITPUB个人空间1PTzx(^M,k
ITPUB个人空间+a u$JA&t}W0Iu~
上面的配置几乎是最简单的配置,它给出了查找EJB的时候,JNDI的形式,以及对话(conversation)的超时时间.
L!? Z#H,]f"q0 然后我们再来看faces-config.xml,它是标准的JSF的说明文件,但是它在SEAM里面并没有完全起到在JSF里面的作用,在JSF里面, 它定义backingbean,并且定义导航规则,但是在SEAM里面,它总是很小,backingbean不需要在这里定义了,因为在SEAM里面,我们可以把EJB做为backingbean,并且用注释的方式来指定它的名字以及范围,另外一个,导航规则也不用在这里定义了,我们可以用另外一个专门的文件来定义,那就是pages.xml,所以在SEAM的应用里面,虽然用到了JSF的技术,但是JSF的主要配置文件faces-config.xml 却不用怎么配置了,当然,你也可以在这里面配置导航规则,只有当我们使用了facelets技术以后,才确定要在这个文件里面配置一些东西,否则,这个文件空在那里也没什么关系,facelets是SEAM框架里面推荐使用的技术,当然,我们也可以不用,也可以只用JSF,如果我们使用facelets的话,就需要要faces-config.xml里面添加如下的声明以支持facelets:
[2q;wcqJ0m#j4x7U0 <?xml version='1.0' encoding='UTF-8'?>
p4fA1d D6S W0 <faces-config version="1.2"ITPUB个人空间uN!Fmcy&u|0u
xmlns="http://java.sun.com/xml/ns/javaee"ITPUB个人空间w.Bdvh*\#m8f
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"ITPUB个人空间3T(m5Y8JA zH
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
8NXK(B M4{ML/q0
*vZ p4\d*{*O'|G0 http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">ITPUB个人空间*J!nsxP'W9S}O
:n4NoU"g~ alr6{0 <application>
O4WSHl#i0 <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>ITPUB个人空间'_f1k.Q+kT'd
</application>ITPUB个人空间Z1L[k8hKznd
ITPUB个人空间*J&H$H _B/`}
</faces-config>
2Qrwd%O;b4o$u Q |2M0
G0j0euE }:t0 最后我们再来看pages.xml,它是定义页面之间的导航规则的,这个文件是可有可无的,SEAM启动的时候,会找这个文件,找到了就读里面的配置,找不到也没关系,就当什么也没有发生.ITPUB个人空间7hX#^Wt;v%O
它的大概内容如下:ITPUB个人空间1~p1J Xu-Gp
-sC"SzY7mGU0 <?xml version="1.0" encoding="UTF-8"?>ITPUB个人空间^s(pVf%{{l1gy3x
<pages xmlns="http://jboss.com/products/seam/pages"ITPUB个人空间3cI#A\ H+v'QSx_
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
P/Jj"\PwHqv0 xsi:schemaLocation="http://jboss.com/products/seam/pages ITPUB个人空间6W6D3Es4{X~
6H/Kx&Hd)cT s&`$i%F5I0 http://jboss.com/products/seam/pages-2.0.xsd"
3u0h[$ZP2w%f0 ITPUB个人空间8\/U5dm;qMT{
no-conversation-view-id="/main.xhtml"ITPUB个人空间)Q8ja8{"IpV,n
login-view-id="/home.xhtml">
ITPUB个人空间7w9@4J+e"M&{!X0x(gl
当然,我们还有另外一个方法,那就是利用seam自带的seam-gen工具,生成一个工程的框架,然后可以用netbeans打开,但是有一些不太好的地方,那就是所有的工程内容都混到一起去了,WEB的工程和EJB的工程都在同一个工程下面,并且由于是基于ant的,所以工程的目录看得可能不太习惯. 但它也有一个好处,那就是它会为你生成各种必须的配置文件,而不需要手工的编写,但是它的坏处就是,如果你后面想要添加EJB或者添加网页内容,就不太方便了,因为目录的组织是怪怪的,不是标准的Netbeans工程组织方式,所以我还是觉得自己建标准的netbeans工程,然后手工添加这些配置文件, 并且这些配置文件也不一定需要自己全部手工编写,完全可以复制过来,然后在一些细节的地方改动一下就可以了.并且配置好以后,要添加工程内容,就可以完全按照netbeans标准工程的方式来添加了.ITPUB个人空间mG+B2i$D
fZh$u iD0 由于自己也是前几天接触的seam,所以错误之处难免,还望大家指出.
0Qtw:W1k(|CU0 ITPUB个人空间+Q2cf2\&d7}? V [
首先我们说一说周边的东西,那就是要添加哪些配置文件,配置文件大概是什么内容,以及各个工程都需要哪些库,这些是基础,也是很重要的,否则布署工程的时候就会出现一大堆的错误.
_k2yOm4S0 在正式工作之前,先准备好要用到的工具,我这里的工具列表如下:ITPUB个人空间;@XZ7MlY W&P
1,Netbeans6.1,可以到http://www.netbeans.org下载,下载的时候,选择下载全部的版本,也就是最大的那个版本.ITPUB个人空间8ICj!{~T
2,Jboss-4.2.2.GA,可以到http://www.jboss.org下载.
/v|,g)x+w?G`0 3,Jboss-seam-2.0.1.GA,也可以到http://www.jboss.org下载ITPUB个人空间Pa7~r'T.t(p
以上具体地址我就不给了,可以自己到首页上去找,这个应该不难吧.
-}f1ZL:V w9L ^0 至于richfaces就不用准备了,seam里面都带了,什么spring,hibernate等等,它里面都有自带.ITPUB个人空间H,? D7M0_"[
2fg%UIt0 本文的流程如下,先是大概介绍每个工程的配置文件有哪些,以及它们需要哪些库文件,然后才真正写一个示例程序,所以前面的配置文件内容仅供参考,让我们知道,里面包括了哪些元素,因为实际的工程和它不一定是一样的.ITPUB个人空间1u @$w1v"U4T2Ie
ITPUB个人空间#k^rA8Ogi4V4E H'?
准备工作做好以后,就可以开始了,打开我们熟悉的Netbeans,选择新建工程,然后选择新建Web工程,在建WEB工程的时候, 不要选择使用任何框架,因为现在还没有seam的netbeans插件,所以,一切的配置都得靠手写.建好了WEB工程以后,在WEB-INF文件夹下面添加如下文
ages.xml,components.xml,faces-config.xml,而web.xml是我们本来就有的,但是我们要修改一下里面的内容,好让它可以配合seam框架运行.更改好的web.xml内容大致如下:;b ^bYe8H0 如果你的WEB容器支持JAVAEE5,则下面的web-app version就可以等于2.5了,如果是支持J2EE1.4的,那么就要把它改成2.4的版本,建议是利用netbeans生成的web.xml基础上改,也就是只改内容,而不改xml的头部说明,也就是下面的web-app部份,一般不要去改,我们只改动里面的元素而已.ITPUB个人空间#v)V!w5d)hAz
<?xml version="1.0" encoding="UTF-8"?>ITPUB个人空间7T S'_4z Q@Sf
<web-app version="2.5"ITPUB个人空间s [.k,v7Z S aj
xmlns="http://java.sun.com/xml/ns/javaee"ITPUB个人空间T!tE4[;D]Sa5?
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
ho;r [z~0 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
(Sf0eh6m4mDqmp0 ITPUB个人空间;[1_,WZ8U
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
4A0B't%@a1e?0
+Lt(R"`W-lDG9i+}0 <display-name>Test</display-name>ITPUB个人空间(v!IcyeJB
ITPUB个人空间1c#qZ S'I0C"^v }a
<!-- Seam -->
esO,} W0 ITPUB个人空间:F7Qxy*o&DK5G_F
<listener>
x~(h(s N&R1T/\0 <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
8c%BT6Kk4x#Y~0 </listener>ITPUB个人空间,R5P0hD)d%v
ITPUB个人空间%W6fir+n
<servlet>ITPUB个人空间G]9cn.\Zay.Q
<servlet-name>Seam Resource Servlet</servlet-name>
+`$d*M ?D,g)A1X0 <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>ITPUB个人空间Ik$\[cO
</servlet>ITPUB个人空间\/V6DvI#MU
ITPUB个人空间T fYo^1GXN+jQ
<servlet-mapping>ITPUB个人空间.d~!i{(op"F
<servlet-name>Seam Resource Servlet</servlet-name>ITPUB个人空间.|9S5d;{d4LZ;d[ GJt
<url-pattern>/seam/resource/*</url-pattern>ITPUB个人空间yG3S,|} pO
</servlet-mapping>ITPUB个人空间cb.g V6VlF wS
ITPUB个人空间#L ua6N*Q4o,q
<filter>
*@gV%d5S,\)e|$d.m0 <filter-name>Seam Filter</filter-name>
._X w:jE6T0 <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
e]o$uLA0 </filter>
1H:H^\1I;LJ\N N0 ITPUB个人空间 gl4S/n])l7p${L
<filter-mapping>ITPUB个人空间 Zaf]j![|.X
<filter-name>Seam Filter</filter-name>ITPUB个人空间({Yy*_Jk+y
<url-pattern>/*</url-pattern>
sA'm'k/IJ3LZ0 </filter-mapping>ITPUB个人空间[9E]!]R$s
*l MY8h mgy2{O0 <!-- 这里用了facelets的技术,我们的例子里面没有用到 -->
2Z x rq*h$J0 ITPUB个人空间c,KE0D0Lnv
<context-param>ITPUB个人空间/[e.d#c9sU dr
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
/e`[.sd;Y9Q0e9N0 <param-value>.xhtml</param-value>
!u8J9@ O)_)V(x7T0 </context-param>
S@e4bqs(P1e0 ITPUB个人空间T]N3\e.w
<context-param>
.m4[Z(v'o [qB0 <param-name>
)T U2V)? K-LX)N0 javax.faces.STATE_SAVING_METHODITPUB个人空间%P"s4m2O0o
</param-name>
}${ Xy/{+Im0 <param-value>server</param-value>
4Yx9d0jw0 </context-param>
6n:X[3zo$m m:L1}$W0 ITPUB个人空间 J0r'u(w"A4O$~Q\
<context-param>ITPUB个人空间 o\7}~,z%m+y!iF
<param-name>facelets.DEVELOPMENT</param-name>
+U9K#i3C uor0 <param-value>true</param-value>
9[0\Z?"h0 </context-param>ITPUB个人空间$r5\7l#w#Rs{%z;Q1v
ITPUB个人空间Z:F+Y7q)b.Q@'s3ns*B
<servlet>
BI5F\p\$t0 <servlet-name>Faces Servlet</servlet-name>
-q HUnT d0 <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
8d8yxdkg1W$L$I.Es0 <load-on-startup>1</load-on-startup>
AW+t!Q)[U'`Gy.t:@A"[0 </servlet>
T5h@b(v3?Uc0
VV)SA2s _0 <servlet-mapping>ITPUB个人空间"kg1vXra
<servlet-name>Faces Servlet</servlet-name>
Q+TU3F$S P0 <url-pattern>*.seam</url-pattern>ITPUB个人空间)X|3I_Vhz
</servlet-mapping>ITPUB个人空间"S"usy%g Oq'jE"X
ITPUB个人空间6sH(g"GqI!x'A?
<session-config>
,j*MTF3m.]$X8E0 <session-timeout>10</session-timeout>
;SE l c4KY0 </session-config>
d7L rPM0~p0 ITPUB个人空间 W*sg1h!?q?z
</web-app>
%ceK4[xI9Iw&Lf0
:s)_^i.G-Y;J!Ywy;X0 在添加其它三个文件的内容之前,先说一下那三个文件是干什么用的,首先components.xml,这个文件里面写的是seam组件的配置,它是必不可少的,一般来说,它可以放在很多地方,但是最好还是放在WEB-INF下面,下面来看看它里面的内容:ITPUB个人空间.al tJ8x{
uU S3w^0 <?xml version="1.0" encoding="UTF-8"?>ITPUB个人空间2j'mUQF9~Y&_4\M
<components xmlns="http://jboss.com/products/seam/components"ITPUB个人空间![ sGe%U/T
xmlns:core="http://jboss.com/products/seam/core"
+x2zh X6M8ZZ0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
_ oM1O~6q%Y)q0 xsi:schemaLocation=
-c:B GXat0 "http://jboss.com/products/seam/coreITPUB个人空间F!Dd:H2d*gS1h D
http://jboss.com/products/seam/core-2.0.xsdITPUB个人空间'z:\)[$g/F
http://jboss.com/products/seam/componentsITPUB个人空间+K;L1Zrz&n8s/i
http://jboss.com/products/seam/components-2.0.xsd">
H#sh^.@U5S4C(^0 <core:init jndi-pattern="Seam6/#{ejbName}/local" debug="true"/>ITPUB个人空间BRd#Kt*g9c7P]
<core:manager conversation-timeout="120000"/>
i9C;E!HeP0 </components>ITPUB个人空间1PTzx(^M,k
ITPUB个人空间+a u$JA&t}W0Iu~
上面的配置几乎是最简单的配置,它给出了查找EJB的时候,JNDI的形式,以及对话(conversation)的超时时间.
L!? Z#H,]f"q0 然后我们再来看faces-config.xml,它是标准的JSF的说明文件,但是它在SEAM里面并没有完全起到在JSF里面的作用,在JSF里面, 它定义backingbean,并且定义导航规则,但是在SEAM里面,它总是很小,backingbean不需要在这里定义了,因为在SEAM里面,我们可以把EJB做为backingbean,并且用注释的方式来指定它的名字以及范围,另外一个,导航规则也不用在这里定义了,我们可以用另外一个专门的文件来定义,那就是pages.xml,所以在SEAM的应用里面,虽然用到了JSF的技术,但是JSF的主要配置文件faces-config.xml 却不用怎么配置了,当然,你也可以在这里面配置导航规则,只有当我们使用了facelets技术以后,才确定要在这个文件里面配置一些东西,否则,这个文件空在那里也没什么关系,facelets是SEAM框架里面推荐使用的技术,当然,我们也可以不用,也可以只用JSF,如果我们使用facelets的话,就需要要faces-config.xml里面添加如下的声明以支持facelets:
[2q;wcqJ0m#j4x7U0 <?xml version='1.0' encoding='UTF-8'?>
p4fA1d D6S W0 <faces-config version="1.2"ITPUB个人空间uN!Fmcy&u|0u
xmlns="http://java.sun.com/xml/ns/javaee"ITPUB个人空间w.Bdvh*\#m8f
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"ITPUB个人空间3T(m5Y8JA zH
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
8NXK(B M4{ML/q0
*vZ p4\d*{*O'|G0 http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">ITPUB个人空间*J!nsxP'W9S}O
:n4NoU"g~ alr6{0 <application>
O4WSHl#i0 <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>ITPUB个人空间'_f1k.Q+kT'd
</application>ITPUB个人空间Z1L[k8hKznd
ITPUB个人空间*J&H$H _B/`}
</faces-config>
2Qrwd%O;b4o$u Q |2M0
G0j0euE }:t0 最后我们再来看pages.xml,它是定义页面之间的导航规则的,这个文件是可有可无的,SEAM启动的时候,会找这个文件,找到了就读里面的配置,找不到也没关系,就当什么也没有发生.ITPUB个人空间7hX#^Wt;v%O
它的大概内容如下:ITPUB个人空间1~p1J Xu-Gp
-sC"SzY7mGU0 <?xml version="1.0" encoding="UTF-8"?>ITPUB个人空间^s(pVf%{{l1gy3x
<pages xmlns="http://jboss.com/products/seam/pages"ITPUB个人空间3cI#A\ H+v'QSx_
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
P/Jj"\PwHqv0 xsi:schemaLocation="http://jboss.com/products/seam/pages ITPUB个人空间6W6D3Es4{X~
6H/Kx&Hd)cT s&`$i%F5I0 http://jboss.com/products/seam/pages-2.0.xsd"
3u0h[$ZP2w%f0 ITPUB个人空间8\/U5dm;qMT{
no-conversation-view-id="/main.xhtml"ITPUB个人空间)Q8ja8{"IpV,n
login-view-id="/home.xhtml">