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

常用链接

留言簿(2)

随笔档案

文章分类

文章档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

对于一个应用来说,实体对象即是这个应用的数据基础,一开始设计都是从数据模型设计开始的。那我们就从这个Seam的entities开始吧。

在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哦。过写时候我把那个错误信息贴上来,供大家参考。

大概就这些了。有什么问题欢迎讨论。

posted on 2008-12-19 23:51 phyeas 阅读(824) 评论(2)  编辑  收藏 所属分类: Seam项目实战

FeedBack:
# re: Seam新手实战(3):entities 2008-12-22 09:26 小朱
我来学习啦~~~哈哈又上了一课  回复  更多评论
  
# re: Seam新手实战(3):entities 2009-01-19 15:23 蓝天飞翔
以前我用自动成生seam entities的时老是会报异常,后来发现会报异常的原因是jboss tools的问题,现在换成版本配置是jboss5.0+seam2.1+jboss tools3.0的没有问题了...  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: