读书人

Seam的HelloWorld 施用Seam开发简单的

发布时间: 2012-10-11 10:16:10 作者: rapoo

Seam的HelloWorld 使用Seam开发简单的Web应

转自:http://blog.csdn.net/struts2/archive/2007/11/13/1882980.aspx

?

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>
<body>
<f:view>

??? <f:verbatim>
??????? <h2>Seam Hello World</h2>
??? </f:verbatim>

??? <h:form>
??????? <f:verbatim>
??????????? Please enter your name:<br/>
??????? </f:verbatim>

??????? <h:inputText value="#{person.name}" size="15"/><br/>
??????? <h:commandButton type="submit" value="Say Hello"
???????????????????????? action="#{manager.sayHello}"/>
??? </h:form>

??? <f:subview id="fans"
?????????????? rendered="#{!empty(fans)}">
??????? <f:verbatim>
??????????? <p>The following fans have said "hello" to JBoss Seam:</p>
??????? </f:verbatim>

??????? <h:dataTable value="#{fans}" var="fan">
??????????? <h:column>
??????????????? <h:outputText value="#{fan.name}"/>
??????????? </h:column>
??????? </h:dataTable>
??? </f:subview>

</f:view>
</body>
</html>

一些说明:

1. 关于表达式语言,例如?#{person.name}表示跟person的name属性绑定,根据上面@Name的定义,我们知道跟Person的一个实例绑定。

??? #{manager.sayHello} 表示调用manager的sayHello方法,也就是ManagerAction的sayHello方法。

??? #{fans} 由于ManagerAction的fans使用了@Out标注,且诶有制定名字,所以fans在表达式语言中表示ManagerAction的属性,这里只是用来表示,没有输入,所以我没有使用绑定这个词,绑定的含义是提交的时候赋值,输出的时候显示。

?

再说一说配置文件:

WEB-INF/web.xml文件是Web项目集成Seam的切入点,参看一下代码,特别是黑体部分:?

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
???????? xmlns="http://java.sun.com/xml/ns/j2ee"
???????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????? xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee<!DOCTYPE faces-config
??? PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
??? "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
? <!-- single page app, no navigation rules -->
</faces-config>

WEB-INF/navigation.xml是JSF的基本配置文件,这里也为空,因为真的没什么可以配置的,我们的程序是Hello World。

<faces-config version="1.2"
?? xmlns="http://java.sun.com/xml/ns/javaee"
?? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee<components xmlns="http://jboss.com/products/seam/components"
??????????? xmlns:core="http://jboss.com/products/seam/core"
??????????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??????????? xsi:schemaLocation=
????????????? "http://jboss.com/products/seam/core
??????????????

? <core:manager conversation-timeout="120000"/>

</components>

?

conversation-timeout我们在后续状态部分讲解。

?

seam.properties文件用来定义seam的一些基本配置,这里暂时不需要,所以seam.properties为空。

?

ejb模块中,META-INF/ejb-jar.xml文件,用来定义EJB,这里由于这里都是用了标注(@Stateless,@Entity等)所以这里没有ejb的定义,只有Seam的一个拦截器的定义,对所有EJB的调用都需要经过SeamInterceptor,这是Seam对于EJB项目的切入点。

?

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
???????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee??? </properties>
? </persistence-unit>
</persistence>?

?

ear的lib目录中包含了我们需要使用的类库文件,分别是jboss-el.jar和jboss-seam.jar.

ear的META-INF目录包含了对这个ear项目定义的application.xml文件,内容为:

<application>
? <display-name>Seam Hello World</display-name>

? <module>
??? <web>
????? <web-uri>app.war</web-uri>
????? <context-root>/helloworld</context-root>
??? </web>
? </module>

? <module>
??? <ejb>app.jar</ejb>
? </module>

? <module>
??? <ejb>lib/jboss-seam.jar</ejb>
? </module>

</application>

现在回答前面我们设置的问题。

?

在JBoss服务器启动的时候Load的继承机构为EJBCLassLoader是WEBClassLoader的父类,所以EBJClassLoader装在的内容在WEBClassLoader装在的内容中是可见的。

?

添加Facelets功能

1. 追加Facelets功能需要添加新的类库,这些类库文件需要放在WEB-INF/lib目录下,这些文件的名字是:

???jboss-seam-ui.jar

?? jboss-seam-debug.jar

?? jsf-facelets.jar?

2. 需要配置JSF如何处理文件的方式,使用xhtml代替jsp文件:

faces-config.xml文件追加如下内容:

? <application>
??? <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
? </application>

3. 还需要在web.xml添加如下内容:

? <context-param>
??? <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
??? <param-value>.xhtml</param-value>
? </context-param>

4. 将hello.jsp修改为hello.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
??????? "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
????? xmlns:ui="http://java.sun.com/jsf/facelets"
????? xmlns:h="http://java.sun.com/jsf/html"
????? xmlns:f="http://java.sun.com/jsf/core">
<body>

<h2>The Facelets Demo</h2>

<h:form>
??? Please enter your name:<br/>
??? <h:inputText value="#{person.name}" size="15"/><br/>
??? <h:commandButton type="submit" value="Say Hello"
???????????????????? action="#{manager.sayHello(person)}"/>
</h:form>

<f:subview id="fans"
?????????? rendered="#{!empty(fans)}">
??? <p>The following people have said "hello" to JBoss Seam:</p>
??? <h:dataTable value="#{fans}" var="fan">
??????? <h:column>
??????????? <h:outputText value="#{fan.name}"/>
??????? </h:column>
??? </h:dataTable>
</f:subview>

</body>
</html>

1 楼 cnlw1985 2010-06-02 垃圾seam

读书人网 >Web前端

热点推荐