日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SEAM学习(一)-----安装运行example

發(fā)布時(shí)間:2024/10/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SEAM学习(一)-----安装运行example 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.下載jboss seam并解壓

2.安裝ant:解壓bin版本,新建ANT_HOME,并將其bin目錄添加到系統(tǒng)path

3.更改seam的build.properties,添加jboss.home D:\\DevelopTool\\jboss-4.2.2.GA。注意路徑后邊不能有空格

4.用cmd轉(zhuǎn)到examples的registration目錄下,運(yùn)行ant deploy

5.瀏覽器:http://localhost:8080/seam-registration

?

分析:

user

//$Id: User.java 2360 2006-10-25 20:17:46Z gavin $ package org.jboss.seam.example.registration;import static org.jboss.seam.ScopeType.SESSION;import java.io.Serializable;import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;import org.hibernate.validator.Length; import org.hibernate.validator.NotNull; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope;@Entity

/*Seam組件需要一個 組件名稱,此名稱由注解 @Name來指定。此名稱必須在Seam應(yīng)用內(nèi)唯一。

當(dāng)JSF用一個與組件同名的名稱去請求Seam來解析上下文變量, 且該上下文變量尚未定義(null)時(shí),

Seam就將實(shí)例化那個組件,并將新實(shí)例綁定給上下文變量。 在此例中,Seam將在JSF第一次遇到名為 user 的變量時(shí)實(shí)例化 User。

每當(dāng)Seam實(shí)例化一個組件時(shí),它就將始化后的實(shí)例綁定給組件中 默認(rèn)上下文 的上下文變量。

默認(rèn)的上下文由 @Scope注解指定。 User Bean是個會話作用域的組件。*/

@Table(name="users") public class User implements Serializable {private static final long serialVersionUID = 1881413500711441951L;private String username;private String password;private String name;public User(String name, String password, String username){this.name = name;this.password = password;this.username = username;}public User() {}@NotNullpublic String getName(){return name;}public void setName(String name){this.name = name;}public String getPassword(){return password;}public void setPassword(String password){this.password = password;} public String getUsername(){return username;}public void setUsername(String username){this.username = username;}@Overridepublic String toString() {return "User(" + username + ")";} }?---------------------------------------------------------------------------------------------register接口://$Id: Register.java 2056 2006-09-28 00:36:56Z gavin $ package org.jboss.seam.example.registration;import javax.ejb.Local;@Local public interface Register {public String register(); }?-----------------------------------------------------------------------------------------------register action//$Id: RegisterAction.java 5298 2007-06-20 00:08:47Z gavin $ package org.jboss.seam.example.registration;import java.util.List;import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.faces.FacesMessages; import org.jboss.seam.log.Log;@Statelesspublic class RegisterAction implements Register {注解 @In將Bean的一個屬性標(biāo)記為由Seam來注入。 在此例中,此屬性由名為 user 的上下文變量注入(實(shí)例的變量名)。 private User user;@PersistenceContextprivate EntityManager em;@Loggerprivate static Log log;public String register(){List existing = em.createQuery("select u.username from User u where u.username=#{user.username}").getResultList();if ( existing.size()==0 ){em.persist(user);log.info("Registered new user #{user.username}");return "/registered.jspx";}else{FacesMessages.instance().add("User #{user.username} already exists");?//Seam提供了大量的 內(nèi)置組件(built-in components) 來協(xié)助解決那些經(jīng)常遇到的問題。 用 FacesMessages 組件就可很容易地來顯示模板化的錯誤或成功的消息。 內(nèi)置的Seam組件還可由注入或通過調(diào)用 instance() 方法來獲取。 return null;//多個JSF動作監(jiān)聽器方法返回一個字符串值的輸出,它決定了接下來應(yīng)顯示的頁面內(nèi)容。 空輸出(或返回值為空的動作監(jiān)聽器方法)重新顯示上一頁的內(nèi)容.}}}

Seam組件需要一個 組件名稱,此名稱由注解 @Name來指定。此名稱必須在Seam應(yīng)用內(nèi)唯一。當(dāng)JSF用一個與組件同名的名稱去請求Seam來解析上下文變量, 且該上下文變量尚未定義(null)時(shí),Seam就將實(shí)例化那個組件,并將新實(shí)例綁定給上下文變量。 在此例中,Seam將在JSF第一次遇到名為 user 的變量時(shí)實(shí)例化 User。 每當(dāng)Seam實(shí)例化一個組件時(shí),它就將始化后的實(shí)例綁定給組件中 默認(rèn)上下文 的上下文變量。默認(rèn)的上下文由 @Scope注解指定。 User Bean是個會話作用域的組件。

?頁面:<?xml version="1.0" encoding="utf-8"?> <!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:s="http://jboss.com/products/seam/taglib"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><head><title>Register New User</title></head><body><f:view><h:form> <s:validateAll>這里的 <s:validateAll>標(biāo)簽是Seam特有的。 該JSF組件告訴JSF讓它用實(shí)體Bean中所指定的Hibernat驗(yàn)證器注解來驗(yàn)證所有包含輸入的字段。<h:panelGrid columns="2">Username: <h:inputText value="#{user.username}" required="true"/>Real Name: <h:inputText value="#{user.name}" required="true"/>Password: <h:inputSecret value="#{user.password}" required="true"/></h:panelGrid></s:validateAll><h:messages/><h:commandButton value="Register" action="#{register.register}"/></h:form></f:view></body></html>

?

registered

<?xml version="1.0" encoding="utf-8"?> <!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:f="http://java.sun.com/jsf/core"><head><title>Successfully Registered New User</title></head><body><f:view>Welcome, #{user.name}, you are successfully registered as #{user.username}.</f:view></body></html>?--------------------------------------------------------------------------------------------------------------------

部署描述文件:

(1)Seam組件部署描述文件:components.xml

如果你此前曾接觸過許多的Java框架,你就會習(xí)慣于將所有的組件類放在某種XML文件中來聲明,那些文件就會隨著項(xiàng)目的不斷成熟而不斷加大到最終到不可收拾的地步。 對于Seam應(yīng)用,你盡可放心,因?yàn)樗⒉灰髴?yīng)用組件都要有相應(yīng)的XML。大部份的Seam應(yīng)用要求非常少量的XML即可,且XML文件大小不會隨著項(xiàng)目的增大而快速增長。

無論如何,若能為 某些 組件(特別是Seam內(nèi)置組件)提供某些 外部配置往往是有用的。這樣一來,我們就有幾個選擇, 但最靈活的選擇還是使用位于 WEB-INF 目錄下的 components.xml 配置文件。 我們將用 components.xml 文件來演示Seam怎樣在JNDI中找到EJB組件:

<components xmlns="http://jboss.com/products/seam/components"xmlns:core="http://jboss.com/products/seam/core"><core:init jndi-pattern="@jndiPattern@"/> </components>

此代碼配置了Seam內(nèi)置組件 org.jboss.seam.core.init 的 jndiPattern 屬性。這里需要奇怪的@符號是因?yàn)锳NT腳本會在部署應(yīng)用時(shí)將正確的JNDI語法在標(biāo)記處自動填補(bǔ)

(2)Web部署描述文件:web.xml

我們將以WAR的形式來部署此小應(yīng)用的表示層,因此需要web部署描述文件。

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5"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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- Seam --><listener><listener-class>org.jboss.seam.servlet.SeamListener</listener-class></listener><!-- MyFaces --><listener><listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class></listener><context-param><param-name>javax.faces.STATE_SAVING_METHOD</param-name><param-value>client</param-value></context-param><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><!-- Faces Servlet Mapping --><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.seam</url-pattern></servlet-mapping></web-app>

此 web.xml 文件配置了Seam和JSF。所有Seam應(yīng)用中的配置與此處的配置基本相同。

(3)JSF配置:faces-config.xml

絕大多數(shù)的Seam應(yīng)用將JSF來作為表示層。因而我們通常需要 faces-config.xml。SEAM將用Facelet定義視圖表現(xiàn)層,所以我們需要告訴JSF用Facelet作為它的模板引擎。

<?xml version="1.0" encoding="UTF-8"?> <!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><!-- A phase listener is needed by all Seam applications --><lifecycle><phase-listener>org.jboss.seam.jsf.SeamPhaseListener</phase-listener></lifecycle></faces-config>

注意我們不需要申明任何JSF managed Bean!因?yàn)槲覀兯械膍anaged Bean都是通過經(jīng)過注釋的Seam組件。所以在Seam的應(yīng)用中,faces-config.xml比原始的JSF更少用到。

實(shí)際上,一旦你把所有的基本描述文件配置完畢,你所需寫的 唯一類型的 XML文件就是導(dǎo)航規(guī)則及可能的jBPM流程定義。對于Seam而言, 流程(process flow) 及 配置數(shù)據(jù) 是唯一真正屬于需要XML定義的。

在此簡單的示例中,因?yàn)槲覀儗⒁晥D頁面的ID嵌入到Action代碼中,所以我們甚至都不需要定義導(dǎo)航規(guī)則。

(4)EJB部署描述文件:ejb-jar.xml

ejb-jar.xml 文件將 SeamInterceptor 綁定到壓縮包中所有的會話Bean上,以此實(shí)現(xiàn)了Seam與EJB3的整合。

<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 http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"version="3.0"><interceptors><interceptor><interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class></interceptor></interceptors><assembly-descriptor><interceptor-binding><ejb-name>*</ejb-name><interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class></interceptor-binding></assembly-descriptor></ejb-jar>
(5)EJB持久化部署描述文件:persistence.xml

persistence.xml 文件告訴EJB的持久化層在哪找到數(shù)據(jù)源,該文件也含有一些廠商特定的設(shè)定。此例在程序啟動時(shí)自動創(chuàng)建數(shù)據(jù)庫Schema。

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"version="1.0"><persistence-unit name="userDatabase"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:/DefaultDS</jta-data-source><properties><property name="hibernate.hbm2ddl.auto" value="create-drop"/></properties></persistence-unit> </persistence>

?

---------------------------------------------------------------------------------------------------------------------


工作原理

當(dāng)提交表單時(shí),JSF請求Seam來解析名為 user 的變量。由于還沒有值綁定到 user 上(在任意的Seam上下文中), Seam就會實(shí)例化 user組件,接著把它保存在Seam會話上下文后,然后將 User 實(shí)體Bean實(shí)例返回給JSF。

表單輸入的值將由在 User 實(shí)體中所指定的Hibernate驗(yàn)證器來驗(yàn)證。 若有非法輸入,JSF就重新顯示當(dāng)前頁面。否則,JSF就將輸入值綁定到 User 實(shí)體Bean的字段上。

接著,JSF請求Seam來解析變量 register。 Seam在無狀態(tài)上下文中找到 RegisterAction 無狀態(tài)的會話Bean并把它返回。JSF隨之調(diào)用 register() 動作監(jiān)聽器方法。

Seam攔截方法調(diào)用并在繼續(xù)調(diào)用之前從Seam會話上下文注入 User 實(shí)體。

register() 方法檢查所輸入用戶名的用戶是否已存在。 若存在該用戶名,則錯誤消息進(jìn)入 facesmessages 組件隊(duì)列,返回?zé)o效結(jié)果并觸發(fā)瀏覽器重顯頁面。facesmessages 組件嵌在消息字符串的JSF表達(dá)式,并將JSF facesmessage 添加到視圖中。

若輸入的用戶不存在,"/registered.jsp" 輸出就會將瀏覽器重定向到 registered.jsp 頁。 當(dāng)JSF來渲染頁面時(shí),它請求Seam來解析名為 user 的變量,并使用從Seam會話作用域返回的 User 實(shí)體的屬性值。

轉(zhuǎn)載于:https://www.cnblogs.com/cxccbv/archive/2009/01/25/1380876.html

總結(jié)

以上是生活随笔為你收集整理的SEAM学习(一)-----安装运行example的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。