精品成人免费,久久网站免费观看,国产91在线播放精品91http://www.aygfsteel.com/phyeas/category/36467.html我是程序員?我是程序員!zh-cnThu, 25 Dec 2008 10:19:33 GMTThu, 25 Dec 2008 10:19:33 GMT60Seam新手實戰(4):外鍵http://www.aygfsteel.com/phyeas/articles/248165.htmlphyeasphyeasWed, 24 Dec 2008 15:02:00 GMThttp://www.aygfsteel.com/phyeas/articles/248165.htmlhttp://www.aygfsteel.com/phyeas/comments/248165.htmlhttp://www.aygfsteel.com/phyeas/articles/248165.html#Feedback0http://www.aygfsteel.com/phyeas/comments/commentRss/248165.htmlhttp://www.aygfsteel.com/phyeas/services/trackbacks/248165.html

一個圖書管理系統中的兩個對象:Book(書籍),BookType(書籍類型)。Book和BookType之間是多對一關系。

說到主從表的關聯關系,自然而然地想起的一種實現方式就是選擇框,比如在Book的編輯界面是使用一個類型的下拉選擇框,選擇一個類型,然后保存。于是就有下例代碼:
<h:selectOneMenu id="type" value="#{bookHome.instance.bookType.typeId}">
                    
<f:selectItems value="#{bookTypeList.typeSelectItems}" />
</h:selectOneMenu>
這段代碼的作者(我)原本的想法是讓這個下拉框與bookHome.instance里的bookType.typeId幫定。比如當前的book類型id是1,修改后將book類型的id改為2,更新到數據庫。但是很不幸。這段代碼并不能執行預期的行為,或者說它還附加了其他行為。即Seam已經覺察到了在這個book中的類型的一個屬性(主鍵值)已經改變了。于是,試圖更新這個類型。但是JPA的規范中是不允許更改主鍵的,這就引起了一個錯誤。不信可以試下哦,呵呵。(以上描述我已經盡可能說清楚我的想法,但可能還是不怎么清楚,希望大家看不懂的說說哪里看不懂,我好改正)。我想說的是,不要直接幫定到外鍵,而是現幫定到一個臨時變量,比如在bookHome中多寫一個變量:
public class BookHome extends EntityHome<Book>{
private Long typeId;
//..getter setter
}
然后將下拉框邦定到這個變量上,比如:

<h:selectOneMenu id="type" value="#{bookHome.typeId}">
                    
<f:selectItems value="#{bookTypeList.typeSelectItems}" />
</h:selectOneMenu>
。然后在重載的persist或者update方法中寫上:
BookType newType = getEntityManager().find(BookType.class, typeId);
instance.setType(newType);
return super.persist();
就完成了。我叫它“轉移邦定”,呵呵

Seam的解決方案:
其實Seam有另一種解決方案。比如如果你是自動生成代碼的方式,在BookEdit.xhtml中就會看到這樣的代碼:
<div class="association" id="bookTypeParent">
    
        
<h:outputText value="There is no bookType associated with this book." 
                   rendered
="#{bookHome.instance.bookType == null}"/>
        
        
<rich:dataTable var="bookType" 
                   value
="#{bookHome.instance.bookType}" 
                rendered
="#{bookHome.instance.bookType != null}"
              rowClasses
="rvgRowOne,rvgRowTwo"
                      id
="bookTypeTable">
            
<h:column>
                
<f:facet name="header">typeId</f:facet>
                #{bookType.typeId}
            
</h:column>
            
<h:column>
                
<f:facet name="header">bookType typeId</f:facet>
                #{bookType.bookType.typeId}
            
</h:column>
            
<h:column>
                
<f:facet name="header">typeName</f:facet>
                #{bookType.typeName}
            
</h:column>
            
<h:column>
                
<f:facet name="header">action</f:facet>
                
<s:link view="/BookType.xhtml" 
                         id
="viewbookType" 
                      value
="View" 
                propagation
="none">
                    
<f:param name="bookTypeTypeId" 
                           value
="#{bookType.typeId}"/>
                
</s:link>
            
</h:column>
        
</rich:dataTable>

        
<div class="actionButtons">
            
<s:button value="Select bookType"
                       view
="/BookTypeList.xhtml">
                
<f:param name="from" value="BookEdit"/>
            
</s:button>
        
</div>
        
    
</div>
點擊“Select bookType”頁面就自動跳轉到BookTypeList頁面,列出所有的類型,每個類型后面都有一個select連接,點擊這個連接就可選中這個類型。然后回到BookEdit.xhtml。很Seam很強大吧,呵呵。其實為何這樣能完成一個選擇都是在BookEdit.page.xml里配置的。配置大概如下:
   <begin-conversation join="true"/>
   
   
<action execute="#{bookHome.wire}"/>
   
   
<param name="bookFrom"/>
   
<param name="bookBookId" value="#{bookHome.bookBookId}"/>
   
<param name="bookTypeFrom"/>
   
<param name="bookTypeTypeId" value="#{bookTypeHome.bookTypeTypeId}"/>
 <begin-conversation join="true"/>  :開始一個conversation(我暫稱之為“頁面流”),如果已存在,就加入。而不重新創建。
<action execute="#{bookHome.wire}"/>  :一最重要的這個。如果沒有執行這個方法這段跳轉就沒有任何效果了。,先來看下這個方法是怎么寫的吧:

public void wire() {
        getInstance();
//獲取instance,放在這里是為了加在instance
        BookType bookType = bookTypeHome.getDefinedInstance();//獲取類型。
        if (bookType != null) {//如果選擇的類型不為null
            getInstance().setBookType(bookType);//設置書籍類型
        }
    }

那bookTypeHome從哪來的呢?天上掉下的?呵呵,當然不是。就在BookHome的上部分:
@In(create = true)
    BookTypeHome bookTypeHome;

前面我說過了。這個@In就是拿來做雙向注入的。bookTypeHome是要注入的組件名稱。
其他的都是參數了,沒啥好解釋的。
但為什么在BookTypeList頁面點select,怎么就會自動跳轉到BookEdit.xhtml呢?奧秘就在這段代碼里(BookTypeList.xhtml):
<s:link view="/#{empty from ? 'BookType' : from}.xhtml" 
                   value
="Select" 
                      id
="bookType">
                
<f:param name="bookTypeTypeId" 
                        value
="#{bookType.typeId}"/>
            
</s:link>
從BookEdit里傳來一個from。
<s:button value="Select bookType"
                       view
="/BookTypeList.xhtml">
                
<f:param name="from" value="BookEdit"/>
            
</s:button>
就告訴了BookTypeList,是從BookEdit里來的,點Select的時候就不要去其他地方了。直接回去。

好了,今天到這,困了,上面講的不明白的歡迎email或qq聯系我。。




phyeas 2008-12-24 23:02 發表評論
]]>
Seam新手實戰(3):entitieshttp://www.aygfsteel.com/phyeas/articles/247416.htmlphyeasphyeasFri, 19 Dec 2008 15:51:00 GMThttp://www.aygfsteel.com/phyeas/articles/247416.htmlhttp://www.aygfsteel.com/phyeas/comments/247416.htmlhttp://www.aygfsteel.com/phyeas/articles/247416.html#Feedback1http://www.aygfsteel.com/phyeas/comments/commentRss/247416.htmlhttp://www.aygfsteel.com/phyeas/services/trackbacks/247416.html
在Seam中你有兩種方式創建你的實體對象,一是從數據庫生成,二是自己創建,再由seam幫你將對應的數據表建起來。從應用的角度來說,兩種方式沒有啥區別,但從開發的角度講,推薦使用生成的方式。因為這樣可以剩下很多敲代碼的時間。呵呵。好戲放后面,讓我們先看自己創建entity的過程。

前提是你的工程已經創建完畢(如何創建過程請看本系列《1》)。

一般實體類都放在src/model下。便于辨別那些是業務對象,哪些是數據對象(關于Seam的分層網上很多地方有說,這里就不說了)。在src/model文件夾上右鍵-》new->Seam Entity。就可以看到如下界面:

這里就只需要填寫名稱即可。解釋一下它們的意思:
                                                    Seam Project:即屬于那個工程
                                                    Seam entity class name:即這個類的名稱
                                                    Package name:屬于那個包的
                                                    Master page name:這個會自動生成的家伙是說你的列表頁面和業務動作處理(action)的名稱
                                                    Page name:這個也會自動生成,是指明細頁面的名稱和業務動作處理的名稱(兩個是相同名稱的)

隨便起個名字,點Finish,可能需要等待一段時間,這是因為Seam自動創建了一個xhtml頁面,正在試圖打開。打開這個東西需要一點時間
創建成功后。在你所選的包下就會多一個類。里面只有三個屬性:id,version,name。以我創建的User類為例:

@Entity
public class User implements Serializable {
    
    
//seam-gen attributes (you should probably edit these)
    private Long id;
    
private Integer version;
    
private String name;
    
    
//add additional entity attributes
    
    
//seam-gen attribute getters/setters with annotations (you probably should edit)
        
    @Id @GeneratedValue
    
public Long getId() {
         
return id;
    }

    
public void setId(Long id) {
         
this.id = id;
    }
    
    @Version
    
public Integer getVersion() {
         
return version;
    }

    
private void setVersion(Integer version) {
         
this.version = version;
    }       
    
    @Length(max
=20)
    
public String getName() {
         
return name;
    }

    
public void setName(String name) {
         
this.name = name;
    }       
}

這個類實現自Serializable是因為這個類需要被序列化,當遇到特殊情況時可以起寫作用。先解釋下這些注解吧。
@Entity:標注這是一個實體對象 這是JPA的標記。表明即是類名,當然,你也可以讓這兩個東西不是對應關系,在@Entity下加個@Table注解即可。比如
       @Entity
       @Table(name = "BookType", catalog = "test")

@Id 主鍵標識,為了確保對象的唯一性,建議每個entity都加一個主鍵,否則你就等著出錯吧。呵呵
@GeneratedValue  表示主鍵值為自動生成值
@Version  這個是jpa的樂觀鎖機制。有興趣了解樂觀鎖及悲觀鎖的可以看hibernate的資料,篇幅太長,這里就不介紹了。
@Length(max=20)  限制長度為最大20,這個在作驗證時有用。
恩。這個實體類就這么簡單。呵呵,你還需要其他字段就再加上去吧。。
其實到這個,整個CRUD的頁面和處理方法都寫好了。這時只要將項目部署到服務器,然后訪問列表頁面即可。忘了說了,我這里生成的頁面是userList.xhtml和user.xhtml。工程名為SeamTest。所以我要訪問http://localhost:8080/SeamTest/userList.seam,一個增刪改查就出來了哦。還有比這更快的嗎。呵呵,現在要在頁面上添加東西就照葫蘆畫瓢。Ctrl+C and Ctrl+v就出來了。如果頁面不符合規則,再調也可以,這里簡單說下seam的幫定機制,還是已我的user為例:

<h:inputText id="name" required="true"
                             value
="#{userHome.instance.name}"/>
seam 的幫定機制是根據value進行的。也就是說,無論你的id寫的是什么。這個文本框的東西最終都要賦值到name上。這就是seam的邦定機制。這樣邦定會有一個問題。等以后介紹,現在先接著看

生成entities。用數據庫表生成entities就更簡單了。在src/model文件夾上右鍵,然后選擇new->Seam Generate entities。會彈出這樣的窗口:
不用修改什么選項,直接finish就可以了。這樣entity就會生成了,就連頁面什么的都生成了。增刪改查也寫好了。呵呵,你就做下微調就可以了。這里需要注意的是,你剛剛通過Seam創建的表也被當作普通表生成到你的應用程序里。這樣如果你使用的是linux平臺,就會多一個UserList.xhtml(剛才那個是userList.xhtml)。如果是windows平臺不知道會怎么樣哦(windows文件名不分大小寫)。

可能的錯誤:有幾個網友跟我說他們生成entities時發生了錯誤。錯誤大意是找不到模板或session包。這個是由于使用的版本太新造成的。JBoss Tools3.0僅支持Seam2.0,不要使用2.1哦。過寫時候我把那個錯誤信息貼上來,供大家參考。

大概就這些了。有什么問題歡迎討論。



phyeas 2008-12-19 23:51 發表評論
]]>
Seam新手實戰(2):自動生成的代碼2-xhtml文件http://www.aygfsteel.com/phyeas/articles/246311.htmlphyeasphyeasMon, 15 Dec 2008 01:15:00 GMThttp://www.aygfsteel.com/phyeas/articles/246311.htmlhttp://www.aygfsteel.com/phyeas/comments/246311.htmlhttp://www.aygfsteel.com/phyeas/articles/246311.html#Feedback2http://www.aygfsteel.com/phyeas/comments/commentRss/246311.htmlhttp://www.aygfsteel.com/phyeas/services/trackbacks/246311.html   首先看home.xhtml。

  1. <ui:composition xmlns="http://www.w3.org/1999/xhtml"
  2.                 xmlns:s="http://jboss.com/products/seam/taglib"
  3.                 xmlns:ui="http://java.sun.com/jsf/facelets"
  4.                 xmlns:f="http://java.sun.com/jsf/core"
  5.                 xmlns:h="http://java.sun.com/jsf/html"
  6.                 xmlns:rich="http://richfaces.org/rich"
  7.                 template="layout/template.xhtml">
  8. </ui:composition>

ui:composition元素:UI組件,使用這個元素做根元素表示這個頁面并不是一個完整的頁面,而是需要一個template頁面作為摸版的內容頁面。

        xmlns:根元素命名空間。就是那些不帶前綴標簽比如<div>

         xmlns:s:Seam元素的命名空間。

        template:摸版頁面

摸版頁面:

  1. <html xmlns="http://www.w3.org/1999/xhtml"
  2.       xmlns:ui="http://java.sun.com/jsf/facelets"
  3.       xmlns:h="http://java.sun.com/jsf/html"
  4.       xmlns:f="http://java.sun.com/jsf/core"
  5.       xmlns:s="http://jboss.com/products/seam/taglib">
  6. <head>
  7.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  8.     <title>SeamTest</title>
  9.     <link href="stylesheet/theme.css" rel="stylesheet" type="text/css" />
  10. </head>
  11. <body>
  12.     <ui:include src="menu.xhtml">
  13.         <ui:param name="projectName" value="SeamTest"/>
  14.     </ui:include>
  15.     <div class="body">
  16.         <ui:insert name="body"/>
  17.     </div>
  18.     <div class="footer">
  19.         Powered by <a href="http://jboss.com/products/seam">Seam</a>.
  20.         Generated by seam-gen.
  21.     </div>
  22. </body>
  23. </html>

ui:include:與<jsp:include>差不多。但這里沒有引入jsp命名空間。所以使用<ui:include>。

<ui:insert/>:這個是一個template頁面。這個標簽表示插入一個名為body的內容塊。在內容頁面--home.xhtml--與此對應的是:<ui:define name="body"></ui:define>。在Seam-gen生成的頁面中幾乎所有的頁面都將template指向template.xhtml。還有另一種使用摸板的方式。比如layout/edit.xhtml。

  1. <ui:composition  xmlns="http://www.w3.org/1999/xhtml"
  2.                  xmlns:ui="http://java.sun.com/jsf/facelets"
  3.                  xmlns:h="http://java.sun.com/jsf/html"
  4.                  xmlns:f="http://java.sun.com/jsf/core"
  5.                  xmlns:s="http://jboss.com/products/seam/taglib">
  6.     <div class="prop">
  7.         <s:label styleClass="name #{invalid?'errors':''}">
  8.             <ui:insert name="label"/>
  9.             <s:span styleClass="required" rendered="#{required}">*</s:span>
  10.         </s:label>
  11.         <span class="value #{invalid?'errors':''}">
  12.             <s:validateAll>
  13.                 <ui:insert/>
  14.             </s:validateAll>
  15.         </span>
  16.         <span class="error">
  17.             <h:graphicImage value="/img/error.gif" rendered="#{invalid}" styleClass="errors"/>
  18.             <s:message styleClass="errors"/>
  19.         </span>
  20.     </div>
  21. </ui:composition>

 

這里依然是使用<ui:insert />作為內容頁面的插入塊。這里有兩塊<ui:insert />第一塊是有name屬性的,第二塊則是沒有name屬性的。如果沒有name屬性,表示在插入塊中沒有放在<ui:defind/》里的東西都放在沒有name的插入塊中。。。比如

  1.             <s:decorate id="nameDecoration" template="layout/edit.xhtml">
  2.                 <ui:define name="label">Name</ui:define>
  3.                 <h:inputText id="name" required="true"
  4.                              value="#{bookHome.instance.name}"/>
  5.             </s:decorate>

 

這里<ui:defind name="label">這就是定義那個有名字的插入塊。而接下來的<h:inputText ... />則是放在了下面沒有名字的<ui:insert />中。上面的代碼也展示了使用摸板的另一種方式。使用<s:decorate/>使用摸板塊,摸板頁面的根需要是一個<ui:composition>元素。s:decorate是一個seam元素。必須在seam的管理的頁面中使用。

其他:

     jsf中的form是不需要action的。比如<h:form id="login">

    標簽的rendered屬性表示在什么情況下顯示。html標簽沒有rendered屬性,比如div標簽沒有rendered。

其他的jsf標簽我們可以通過學習jsf學習。因為jsf標簽,richFaces標簽,faceslet標簽太多了。這里就不一一介紹了。。。。大家有什么好的資料也麻煩告訴我哦。



phyeas 2008-12-15 09:15 發表評論
]]>
Seam新手實戰(2):自動生成的代碼http://www.aygfsteel.com/phyeas/articles/244853.htmlphyeasphyeasTue, 09 Dec 2008 04:03:00 GMThttp://www.aygfsteel.com/phyeas/articles/244853.htmlhttp://www.aygfsteel.com/phyeas/comments/244853.htmlhttp://www.aygfsteel.com/phyeas/articles/244853.html#Feedback0http://www.aygfsteel.com/phyeas/comments/commentRss/244853.htmlhttp://www.aygfsteel.com/phyeas/services/trackbacks/244853.html  創建工程后會生成一大堆代碼。基本上都是配置文件。而在做 Seam 開發的過程中是不需要整天修改配置文件的。最多寫寫pages.xml或者faces-config.xml。Seam生成的文件夾如下面的結構:

其中。build文件夾存放的是Ant編譯后的東西。
            resources文件夾里就一個文件。XXXX-ds.xml。是用于存放數據源(DataSource)配置文件的。
            src:
                        src下有兩個文件夾:action和modal。即存放頁面動作與領域模型。
                        在modal中有個META-INF文件夾,JPA的配置文件persistence.xml就存放在這個文件夾里。
                        在Modal文件夾里還有幾個值得注意的文件。
                        比如messages_en.properties和security.drl。messages_en.properties是存放系統消息的。
                        如果想讓Seam的系統消息顯示中文就需要翻譯這個文件。而security.drl則是定義安全規則的。
                        在action文件夾中。有一個包:org\domain\SeamTest\session。其中Authenticator.java會自動生成。用于做登陸驗證的。在這里簡單介紹下,先看代碼:
                        
@Name("authenticator")
public class Authenticator
{
    @Logger Log log;
    
    @In Identity identity;
   
    
public boolean authenticate()
    
{
        log.info(
"authenticating #0", identity.getUsername());
        
//write your authentication logic here,
        
//return true if the authentication was
        
//successful, false otherwise
        identity.addRole("admin");
        
return true;
    }

}

         @Name 是用于定義Seam組件。這樣定義的Seam組件可用于雙向注入和其他頁面操作。如果你沒有這個注釋。則表示這個并不是Seam組件,所以也起了一個標識Seam組件的目的。在這里Seam組件被命名為"authenticator",在頁面上要調用這個組件的authenticate方法需要這樣寫:#{authenticator.authenticate}
        @Logger用于注入日志組件
        @In        用于雙向注入。在注入時Seam會尋找當前容器中與該變量名相符的組件。當然了。也可以注入變量名不同的組件。需要指定組件名稱,例如:@In("ident")。這樣的意思就是在容器中尋找名為"ident"的組件將其注入到該類中。(Seam的作用域比較復雜,本篇暫不介紹)
        接下來便是authenticate方法,這個方法中其實最重要的是后面兩句。log.info(....)的意思即保存日志信息,最后那句意思即通過驗證。如果驗證的用戶名密碼不符合則return false;來表示拒絕登陸。比較復雜的是identity.addRole。這個方法是為當前用戶添加一個角色。單如果該方法最終返回false。那么這些添加的角色將不保存。
         那么。如何讓Seam知道當用戶登陸時調用這個方法驗證呢?在/WebContent/WEB-INF/components.xml中有這樣一段配置:
   <security:identity authenticate-method="#{authenticator.authenticate}"
                           security-rules
="#{securityRules}"
                              remember-me
="true"/>
其中authenticate-method即驗證的方法。是以組件形式調用。還有一個security-rules屬性則是安全規則。在哪里配置的?就在上面。
   <drools:rule-base name="securityRules">
       
<drools:rule-files><value>/security.drl</value></drools:rule-files>
   
</drools:rule-base>

這就是剛剛說的那個文件。
既然說到components.xml,那我們就來看下這個文件里還有些什么東西。
 <core:init debug="true" jndi-pattern="@jndiPattern@"/>
這段代碼是定義jndi查找規則的。@jndiPattern@的定義是在/src/modal/components.properties里的這樣一段配置:
#
#Fri Dec 
05 10:37:03 CST 2008
jndiPattern
=\#{ejbName}/local
embeddedEjb
=false
這段配置的意思是開啟jndi查找規則是ejb組件名稱/local。即使用本地EJB組件。而非遠程EJB組件
   <core:manager concurrent-request-timeout="500" 
                 conversation-timeout
="120000" 
                 conversation-id-parameter
="cid"
                 parent-conversation-id-parameter
="pid"/>
conversation-timeout  conversation(頁面流)過期時間。我將conversation稱為頁面流可能不太合適。可以根據你的理解去稱呼它。它是一段頁面流轉的過程定義。Seam中定義了一conversation作用域
conversation-id-parameter用于定義conversation的reuqest parameter name。即因為用戶現在在哪個頁面流中需要瀏覽器回傳一個參數才知道。
parent-conversation-id-parameter。conversation允許定義子頁面流。這個屬性定義瀏覽器回傳父conversation的參數名
   <persistence:managed-persistence-context name="entityManager"
                                     auto-create
="true"
                          entity-manager-factory
="#{SeamTestEntityManagerFactory}"/>
這個就是jpa的entityManager組件的定義了。在Seam組件中使用@In("entityManager")將會自動注入這個組件
   <event type="org.jboss.seam.security.notLoggedIn">
       
<action execute="#{redirect.captureCurrentView}"/>
   
</event>
   
<event type="org.jboss.seam.security.loginSuccessful">
       
<action execute="#{redirect.returnToCapturedView}"/>
   
</event>
這個是對于登陸用的。當客戶訪問一個頁面需要登陸。但用戶又沒有登陸。這時會轉到一個登陸頁面。登陸完畢后又轉會用戶要進入的頁面。如果有這樣的需求就要加上這兩句配置。不過Seam已經自動生成了
其他:默認生成的 face-config.xml里沒有支持中文。可以加入
    <application>
        
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
        
<locale-config>
            
<default-locale>en</default-locale>
            
<supported-locale>bg</supported-locale>
            
<supported-locale>de</supported-locale>
            
<supported-locale>en</supported-locale>
            
<supported-locale>fr</supported-locale>
            
<supported-locale>tr</supported-locale>
        
</locale-config>
    
</application>
代碼:
<supported-locale>zh_CN</supported-locale>


phyeas 2008-12-09 12:03 發表評論
]]>
Seam新手實戰(1):環境搭建http://www.aygfsteel.com/phyeas/articles/244502.htmlphyeasphyeasFri, 05 Dec 2008 03:21:00 GMThttp://www.aygfsteel.com/phyeas/articles/244502.htmlhttp://www.aygfsteel.com/phyeas/comments/244502.htmlhttp://www.aygfsteel.com/phyeas/articles/244502.html#Feedback0http://www.aygfsteel.com/phyeas/comments/commentRss/244502.htmlhttp://www.aygfsteel.com/phyeas/services/trackbacks/244502.html  首先說下我使用的環境:JDK1.6,JBOSS4.2,JBOSS TOOLS 3.0,Eclipse with wtp3.4,JBOSS SEAM2.0
Eclipse下載地址:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR1/eclipse-jee-ganymede-SR1-win32.zip
JBOSS Tools下載地址:http://www.jboss.org/tools/download/index.html
其他JBOSS的東西都可以在這找到:http://www.jboss.org/download/
下載完畢后配置環境:
   JDK:這個網上大把。不說了
   Eclipse:這個就不用說了,直接解壓就可以用。
  JBossTools:如果你的環境和我的一樣,那就在dropins下新建一個文件夾。然后將解壓后的features和 plugins文件夾拷貝到里面,這樣JBoss Tools就安裝好了 。安裝完后啟動Eclipse。將視圖轉到Seam視圖下。
                                                  
   配置Seam:下載JBoss Seam后隨便解壓到一個位置。然后在Eclipse中選擇菜單:Windows->Preferences。在左邊的樹中選擇JBoss Tools->Web->Seam。在右邊會出現一個表格和一個add按鈕。點Add跳出一個窗口。點Browser選擇你剛剛解壓出來的Seam的路徑。點finish就配置好了。
  配置JBoos Server:配置JBOSS服務器。還是選擇Windows->Preferences。在左邊的樹中選擇Server->runtime Environments。add->選擇Jboss AS解壓路徑。finish。還有。。。。在工具欄中有個這個圖標。點旁邊的下拉框。選擇New Server。選擇路徑,下一步時會讓你填用戶名密碼,初始用戶名和密碼都是admin。
OK,配置好了

試下先。
將視圖轉到Seam視圖下。不會的就先看前面。然后再 File -> New -> Seam Project

需要選的地方是Configureation。默認是1.2的。選擇2.0

然后Next -> Next  -> Next -> Next到配置數據庫連接的位置
 選擇 new 一個。進入配置界面。我現在用的是sqlserver。以下以sqlserver為例:

選擇要配置的數據庫類型后填寫Name;然后Next
配置驅動,New一個 

配置Jar List后就FINISH了。

然后后面的步驟就簡單了。直接可以finish。這樣會新建兩個工程。一個是主工程。一個是測試用的。
JBoss Tools已經幫你部署到了你選擇的Jboos服務器里。
現在直接運行JBoss就OK了。如果你配置了Jboos Server。在工具欄中有個這樣的東西第一個是運行Jboss服務器,第二個是用Debug模式運行,第三個是停止。直接點綠色的箭頭。啟動時可能會報一個錯誤:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]對象名 'information_schema.system_sequences' 無效。這是因為Seam啟動時需要這個東西。單數據庫里卻沒有。。不要以為information_schema是庫名,而system_sequences是表名哦。因為就算你在數據庫里建了這樣一個庫和表也是沒用的。解決辦法是修改src/module/META-INF/下的persistence.xml。將里面的hibernate.hbm2ddl.auto設置為create-update。讓seam自己去創建對象。但又不自動刪除。不能用create-drop。因為如果用create-drop在服務器關閉時Seam會自動將它刪除。下次重新創建。而這也會秧及你的數據表。。。只要用create-update啟動一次即可。也可以只create,后面每次就可以用update了。其實可以不換成只update。用create-update也挺好。因為如果數據庫中存在該數據表。Seam就不會再重新create
如果數據庫中的表與將要創建的表結構一致。Seam就不會更新表結構
重新啟動服務器。

啟動完畢后訪問http://localhost:8080/SeamTest/home.seam
如果出現如下頁面就說明所有配置都已完成。讓我們開始Seam吧。


phyeas 2008-12-05 11:21 發表評論
]]>
主站蜘蛛池模板: 喀喇沁旗| 黔东| 视频| 岳阳市| 思南县| 沂水县| 巩留县| 丹巴县| 清丰县| 乐昌市| 和田县| 迁安市| 通河县| 和龙市| 黔江区| 太保市| 共和县| 宜兰县| 观塘区| 石景山区| 多伦县| 体育| 千阳县| 常宁市| 沙坪坝区| 汾西县| 大港区| 宁强县| 洛阳市| 阿勒泰市| 宁阳县| 华安县| 尼玛县| 黎城县| 淮阳县| 迁西县| 信丰县| 龙山县| 凤山县| 伊宁县| 涿州市|