在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的邦定機制。這樣邦定會有一個問題。等以后介紹,現在先接著看value="#{userHome.instance.name}"/>
生成entities。用數據庫表生成entities就更簡單了。在src/model文件夾上右鍵,然后選擇new->Seam Generate entities。會彈出這樣的窗口:

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