对于一个应用来说,实体对象即是这个应用的数据基础,一开始设计都是从数据模型设计开始的。那我们就从这个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项目实战