开发步骤:
1. 先在数据库里创建表。例如,student表。注意,表的名称的第二个字母最好不要大写。以免出现奇怪的问题(好像是hibernate的bug)。
2. 把目录切换到appgen的工作目录,修改文件tables。把里面的内容先去掉,然后添加新的表名。例如,student。
3. 在appgen的工作目录下,运行Ant generate。
运行结果:从数据库里读取表结构,并生成相关的strus表单、jsp文件、hibernate的POJO对象、DAO和manager对象、struts配置文件、spring配置文件、velocity的模板文件。
4. 转到uapp目录下,执行ant package-web生成WAR文件
这个过程里,
a) 会根据java文件生成hibernate的映射文件;
b) compile-dao。编译dao目录下的java对象。
c) package-dao。把dao目录下的classes打包成demo-dao.jar;
d) compile-service。编译service目录下的java对象。
e) package-service。把service目录下的classes打包成demo-service.jar
f) copy-resources。期间,会调用native2ascii Converting 1 file from D:projectappfusemyappfusedemowebWEB-INFclasses to D:projectappfusemyappfusedemobuildwebclasses
g) generate.database.properties。
h) copy-web-files。
i) gen-forms。根据struts配置文件产生Form表单对象。
j) compile-web。会编译action对象。 javac Compiling 40 source files to D:projectappfusemyappfusedemobuildwebclasses
k) webdoclet。产生
i. web.xml
ii. uapp.tld
iii. struts-config.xml
iv. validation.xml
v.
l) package-web.。生成war包。
注意:我们经常要处理实体间的关系,如一对多,多对多。而appgen产生的POJO对象往往都太简单,没有处理这些复杂的关系。所以,我们需要手工地修改POJO对象,建立对象的关联。例如,在Parent对象里建立对Child的关联。
在Parent.java对象里,增加
private Set children =new HashSet();
/**
* @return Returns the booths.
*
*
* @hibernate.collection-one-to-many
* class="org.aos.exhibition.model.Child"
*
* @hibernate.collection-key column="pid"
*
* @hibernate.set
* name="children"
* table="child"
* inverse="true"
* sort="unsorted
* lazy="true"
* cascade="all"
*/
public Set getChildren()
{
return this.children;
}
还有相关的addChildren(Child child)方法和getChildren()方法。
在Child对象里,增加
private Parent parent;
/**
* @return Returns the parent.
*
* @hibernate.many-to-one name="parent"
* column="pid"
* not-null="false"
* cascade="all"
*
*/
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
最后,运行ant package-web产生相关的hibernate映射文件,并编译。
在编译的过程中,可能会有一些错误,例如, ActionForm包名的错误导致编译问题。
org.appfuse.model.Parent应该为org.aos.exhibition.model.Parent。需要自己修改相关的ActionForm,把包名更正。
1. 另外,我们经常会发现appgen给我们产生的jsp代码框架太简单,不能符合我们的要求,例如样式、布局等等。那么我们需要修改uappwebpages目录下的jsp文件。
2. 部署。执行ant deploy. 发布web应用到tomcat的webapps目录下。
3. 拷贝D:Tomcat50webappsdemoWEB-INFclassesorgappfusewebappactionLookupMethods.properties到classesorgaosexhibitionwebappaction 目录下。
4. 如果是中文版本,还需要把ApplicationResources_en.properties里面新增的内容拷贝到ApplicationResources_zh_CN.properties文件里面。
5. 使用链接:http://localhost:端口号/uapp/ 来启动web应用。如果在调试过程中发生net.sf.hibernate.HibernateException: Batch update row count wrong这样的异常,那需要重新运行Ant generate,从第三步开始作一遍