隨筆 - 25  文章 - 32  trackbacks - 0
          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          對于一個應(yīng)用來說,實體對象即是這個應(yīng)用的數(shù)據(jù)基礎(chǔ),一開始設(shè)計都是從數(shù)據(jù)模型設(shè)計開始的。那我們就從這個Seam的entities開始吧。

          在Seam中你有兩種方式創(chuàng)建你的實體對象,一是從數(shù)據(jù)庫生成,二是自己創(chuàng)建,再由seam幫你將對應(yīng)的數(shù)據(jù)表建起來。從應(yīng)用的角度來說,兩種方式?jīng)]有啥區(qū)別,但從開發(fā)的角度講,推薦使用生成的方式。因為這樣可以剩下很多敲代碼的時間。呵呵。好戲放后面,讓我們先看自己創(chuàng)建entity的過程。

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

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

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

          隨便起個名字,點Finish,可能需要等待一段時間,這是因為Seam自動創(chuàng)建了一個xhtml頁面,正在試圖打開。打開這個東西需要一點時間
          創(chuàng)建成功后。在你所選的包下就會多一個類。里面只有三個屬性:id,version,name。以我創(chuàng)建的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;
              }       
          }

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

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

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

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

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

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

          posted on 2008-12-19 23:51 phyeas 閱讀(843) 評論(2)  編輯  收藏 所屬分類: Seam項目實戰(zhàn)

          FeedBack:
          # re: Seam新手實戰(zhàn)(3):entities 2008-12-22 09:26 小朱
          我來學(xué)習(xí)啦~~~哈哈又上了一課  回復(fù)  更多評論
            
          # re: Seam新手實戰(zhàn)(3):entities 2009-01-19 15:23 藍(lán)天飛翔
          以前我用自動成生seam entities的時老是會報異常,后來發(fā)現(xiàn)會報異常的原因是jboss tools的問題,現(xiàn)在換成版本配置是jboss5.0+seam2.1+jboss tools3.0的沒有問題了...  回復(fù)  更多評論
            
          主站蜘蛛池模板: 大兴区| 朝阳市| 双柏县| 边坝县| 获嘉县| 乌恰县| 齐河县| 澄迈县| 永寿县| 东辽县| 景德镇市| 安化县| 宜良县| 墨竹工卡县| 丽水市| 敦化市| 淮阳县| 连云港市| 通河县| 呈贡县| 延津县| 平湖市| 左云县| 黄大仙区| 澄江县| 朝阳市| 临夏市| 南通市| 长宁县| 深州市| 井陉县| 东阿县| 中江县| 江华| 鄂托克前旗| 桃源县| 咸丰县| 梁河县| 永仁县| 扶绥县| 通江县|