如JSP文件、DAO都可以自动生成。这样只要能够掌握AppFuse,就可以提高自己的开发效率,特别是最实用的Appgen工具,此工具是以Xdoclet和maven为主,可以动态批量生成可执行代码框架,这点确实有模板的味道:
大家可看如下示例::::
此工具可以生成一个应用,操作共分五步。
(1)在applicationContext-hibernate.xml中添加POJO的配置文件的路径。
(2)在Eclipse中运行此文件夹下的build.xml,会出现一个对话框,这个对话框会提示用户去寻找存在的POJO或者数据库的表。如果选择POJO,则.java文件必需存在于“model”类包下。假如选择表,则表在数据库里必需存在。
(3)操作到最后,会被要求输入一个应用模块名或者一个子包名。
(4)在命令提示符下,转到此目录,键入“mvn appfuse:full-source”命令,就可以自动生成文件。
这样一个应用就建好了。但要注意的是,生成文件时,要先备份一下项目,因为如果操作不慎会覆盖掉原来修改的文件。
这些文件是由模板生成的,用户可以根据需要来修改模板,如在/extras/appgen/src有生成器的源码。打开其中一个,如Form_jsp.xdt所示。
<XDtTagDef:tagDef namespace="Form" handler="org.example.antbook.xdoclet.Form TagsHandler"/><%@ include file="/common/taglibs.jsp"%>
<!--根据给定的实例名生成标题 -->
<title><fmt:message key="<XDtForm:classNameLower/>Detail.title"/></title>
<content tag="heading"><fmt:message key="<XDtForm:classNameLower/>Detail.heading"/> </content>
<!--对表单的自动生成的处理-->
<ww:form name="<XDtForm:classNameLower/>Form" action="save<XDtForm:className/>" method="post" validate="true">
<!--表示对所有的域有效 -->
<XDtForm:forAllFields>
<XDtForm:ifIsIdOrVersionField>
<ww:hidden name="<XDtForm:classNameLower/>.<XDtForm:fieldName/>" value="%{<XDtForm: classNameLower/>.<XDtForm:fieldName/>}"/>
</XDtForm:ifIsIdOrVersionField>
<XDtForm:ifIsNotIdOrVersionField>
<ww:textfield label="%{getText('<XDtForm:classNameLower/>.<XDtForm:fieldName/>')}" name="<XDtForm:classNameLower/>.<XDtForm:fieldName/>"
value="%{<XDtForm:classNameLower/>.<XDtForm:fieldName/>}" required="true"/>
</XDtForm:ifIsNotIdOrVersionField>
</XDtForm:forAllFields>
<tr>
<td></td>
<td class="buttonBar">
<input type="submit" class="button" name="save"
value="<fmt:message key="button.save"/>" />
<!--用自动生成的参数调用Javas.c.r.i.p.t -->
<input type="submit" class="button" name="delete"
οnclick="return confirmDelete('<XDtForm:className/>')"
value="<fmt:message key="button.delete"/>" />
<input type="submit" class="button" name="method:cancel"
value="<fmt:message key="button.cancel"/>" />
</td>
</tr>
</ww:form>
<!--自动生成的Javas.c.r.i.p.t脚本-->
<s.c.r.i.p.t type="text/javas.c.r.i.p.t">
Form.focusFirstElement(document.forms["<XDtForm:classNameLower/>Form"]);
</s.c.r.i.p.t>
此文件用来生成一个Form表单。代码非常通用,并且用户也不需要知道此过程是怎样实现的。如果用户想生成一些个性化的信息,只需要添加或者修改文件中的HTML标签就可以了。另外也可以看一下生成Action类的模板,代码如下。
<!--根据表单对象生成类 -->
<XDtTagDef:tagDef namespace="Form" handler="org.example.antbook.xdoclet.Form TagsHandler"/>package <XDtFormarentPackageName/>.webapp.action;
import java.util.List;
<!--添加参数引用生成的类 -->
import <XDtConfig:configParameterValue paramName="basePackageName"/>.webapp. action.BaseAction;
import <XDtPackage/packageName/>.<XDtForm:className/>;
import <XDtForm/parentPackageName/>.service.<XDtForm:className/>Manager;
public class <XDtForm:className/>Action extends BaseAction {
<!-通过参数定义变量 -->
private <XDtForm:className/> <XDtForm:classNameLower/>;
private List <XDtForm:classNameLower/>s;
private String <XDtMethodEx:idField getType="propertyName"/>;
private <XDtForm:className/>Manager <XDtForm:classNameLower/>Manager;
<!-定义get方法 -->
public void <XDtMethodEx:idField getType="setterName"/>(String <XDtMethodEx: idField getType="propertyName"/> ) {
this.<XDtMethodEx:idField getType="propertyName"/> = <XDtMethodEx:idField getType="propertyName"/>;
}
<!-定义set方法 -->
public void set<XDtForm:className/>Manager(<XDtForm:className/>Manager manager) {
this.<XDtForm:classNameLower/>Manager = manager;
}
<!-定义get方法 -->
public <XDtForm:className/> get<XDtForm:className/>() {
return <XDtForm:classNameLower/>;
}
<!-定义set方法 -->
public void set<XDtForm:className/>(<XDtForm:className/> <XDtForm:className Lower/> ) {
this.<XDtForm:classNameLower/> = <XDtForm:classNameLower/>;
}
<!-根据参数生成delete方法-->
public String delete() {
<XDtForm:classNameLower/>Manager.remove<XDtForm:className/>(String.valueOf (<XDtForm:classNameLower/>.<XDtMethodEx:idField getType="getterName"/>()));
saveMessage(getText("<XDtForm:classNameLower/>.deleted"));
return SUCCESS;
}
<!-根据参数生成set方法-->
public String edit() {
if (<XDtMethodEx:idField getType="propertyName"/> != null) {
<XDtForm:classNameLower/> = <XDtForm:classNameLower/>Manager.get <XDtForm:className/>(<XDtMethodEx:idField getType="propertyName"/> );
} else {
<XDtForm:classNameLower/> = new <XDtForm:className/>();
}
return SUCCESS;
}
<!-根据参数生成save方法-->
public String save() throws Exception {
if (delete != null) {
return delete();
}
boolean isNew = (<XDtForm:classNameLower/>.<XDtMethodEx:idField getType= "getterName"/>() == null);
<XDtForm:classNameLower/>Manager.save<XDtForm:className/>(<XDtForm:class NameLower/> );
String key = (isNew) ? "<XDtForm:classNameLower/>.added" : "<XDtForm: classNameLower/>.updated";
saveMessage(getText(key));
if (!isNew) {
return "redirect:form";
} else {
return SUCCESS;
}
}
<!-根据参数生成list列表方法-->
public List get<XDtForm:className/>s() {
return <XDtForm:classNameLower/>s;
}
<!-根据参数生成list列表方法-->
public String list() {
<XDtForm:classNameLower/>s = <XDtForm:classNameLower/>Manager.get<XDt Form:className/>s(new <XDtForm:className/>());
return SUCCESS;
}
}
在开发时,一般需要 修改的就是Action类。此类在不同的项目会需要不同的模板,最基本的模板方法已经给出。我们可以在此完成一些修改,在方法的命名上可以参考原来代码中的例子即可。
当然,如果是想对此工具作进一步的了解,做大量自定义的开发的话 ,还是需要深入学习Xdoclet和maven的奥秘的!
愿与志同道合者共勉!
大家可看如下示例::::
此工具可以生成一个应用,操作共分五步。
(1)在applicationContext-hibernate.xml中添加POJO的配置文件的路径。
(2)在Eclipse中运行此文件夹下的build.xml,会出现一个对话框,这个对话框会提示用户去寻找存在的POJO或者数据库的表。如果选择POJO,则.java文件必需存在于“model”类包下。假如选择表,则表在数据库里必需存在。
(3)操作到最后,会被要求输入一个应用模块名或者一个子包名。
(4)在命令提示符下,转到此目录,键入“mvn appfuse:full-source”命令,就可以自动生成文件。
这样一个应用就建好了。但要注意的是,生成文件时,要先备份一下项目,因为如果操作不慎会覆盖掉原来修改的文件。
这些文件是由模板生成的,用户可以根据需要来修改模板,如在/extras/appgen/src有生成器的源码。打开其中一个,如Form_jsp.xdt所示。
<XDtTagDef:tagDef namespace="Form" handler="org.example.antbook.xdoclet.Form TagsHandler"/><%@ include file="/common/taglibs.jsp"%>
<!--根据给定的实例名生成标题 -->
<title><fmt:message key="<XDtForm:classNameLower/>Detail.title"/></title>
<content tag="heading"><fmt:message key="<XDtForm:classNameLower/>Detail.heading"/> </content>
<!--对表单的自动生成的处理-->
<ww:form name="<XDtForm:classNameLower/>Form" action="save<XDtForm:className/>" method="post" validate="true">
<!--表示对所有的域有效 -->
<XDtForm:forAllFields>
<XDtForm:ifIsIdOrVersionField>
<ww:hidden name="<XDtForm:classNameLower/>.<XDtForm:fieldName/>" value="%{<XDtForm: classNameLower/>.<XDtForm:fieldName/>}"/>
</XDtForm:ifIsIdOrVersionField>
<XDtForm:ifIsNotIdOrVersionField>
<ww:textfield label="%{getText('<XDtForm:classNameLower/>.<XDtForm:fieldName/>')}" name="<XDtForm:classNameLower/>.<XDtForm:fieldName/>"
value="%{<XDtForm:classNameLower/>.<XDtForm:fieldName/>}" required="true"/>
</XDtForm:ifIsNotIdOrVersionField>
</XDtForm:forAllFields>
<tr>
<td></td>
<td class="buttonBar">
<input type="submit" class="button" name="save"
value="<fmt:message key="button.save"/>" />
<!--用自动生成的参数调用Javas.c.r.i.p.t -->
<input type="submit" class="button" name="delete"
οnclick="return confirmDelete('<XDtForm:className/>')"
value="<fmt:message key="button.delete"/>" />
<input type="submit" class="button" name="method:cancel"
value="<fmt:message key="button.cancel"/>" />
</td>
</tr>
</ww:form>
<!--自动生成的Javas.c.r.i.p.t脚本-->
<s.c.r.i.p.t type="text/javas.c.r.i.p.t">
Form.focusFirstElement(document.forms["<XDtForm:classNameLower/>Form"]);
</s.c.r.i.p.t>
此文件用来生成一个Form表单。代码非常通用,并且用户也不需要知道此过程是怎样实现的。如果用户想生成一些个性化的信息,只需要添加或者修改文件中的HTML标签就可以了。另外也可以看一下生成Action类的模板,代码如下。
<!--根据表单对象生成类 -->
<XDtTagDef:tagDef namespace="Form" handler="org.example.antbook.xdoclet.Form TagsHandler"/>package <XDtFormarentPackageName/>.webapp.action;
import java.util.List;
<!--添加参数引用生成的类 -->
import <XDtConfig:configParameterValue paramName="basePackageName"/>.webapp. action.BaseAction;
import <XDtPackage/packageName/>.<XDtForm:className/>;
import <XDtForm/parentPackageName/>.service.<XDtForm:className/>Manager;
public class <XDtForm:className/>Action extends BaseAction {
<!-通过参数定义变量 -->
private <XDtForm:className/> <XDtForm:classNameLower/>;
private List <XDtForm:classNameLower/>s;
private String <XDtMethodEx:idField getType="propertyName"/>;
private <XDtForm:className/>Manager <XDtForm:classNameLower/>Manager;
<!-定义get方法 -->
public void <XDtMethodEx:idField getType="setterName"/>(String <XDtMethodEx: idField getType="propertyName"/> ) {
this.<XDtMethodEx:idField getType="propertyName"/> = <XDtMethodEx:idField getType="propertyName"/>;
}
<!-定义set方法 -->
public void set<XDtForm:className/>Manager(<XDtForm:className/>Manager manager) {
this.<XDtForm:classNameLower/>Manager = manager;
}
<!-定义get方法 -->
public <XDtForm:className/> get<XDtForm:className/>() {
return <XDtForm:classNameLower/>;
}
<!-定义set方法 -->
public void set<XDtForm:className/>(<XDtForm:className/> <XDtForm:className Lower/> ) {
this.<XDtForm:classNameLower/> = <XDtForm:classNameLower/>;
}
<!-根据参数生成delete方法-->
public String delete() {
<XDtForm:classNameLower/>Manager.remove<XDtForm:className/>(String.valueOf (<XDtForm:classNameLower/>.<XDtMethodEx:idField getType="getterName"/>()));
saveMessage(getText("<XDtForm:classNameLower/>.deleted"));
return SUCCESS;
}
<!-根据参数生成set方法-->
public String edit() {
if (<XDtMethodEx:idField getType="propertyName"/> != null) {
<XDtForm:classNameLower/> = <XDtForm:classNameLower/>Manager.get <XDtForm:className/>(<XDtMethodEx:idField getType="propertyName"/> );
} else {
<XDtForm:classNameLower/> = new <XDtForm:className/>();
}
return SUCCESS;
}
<!-根据参数生成save方法-->
public String save() throws Exception {
if (delete != null) {
return delete();
}
boolean isNew = (<XDtForm:classNameLower/>.<XDtMethodEx:idField getType= "getterName"/>() == null);
<XDtForm:classNameLower/>Manager.save<XDtForm:className/>(<XDtForm:class NameLower/> );
String key = (isNew) ? "<XDtForm:classNameLower/>.added" : "<XDtForm: classNameLower/>.updated";
saveMessage(getText(key));
if (!isNew) {
return "redirect:form";
} else {
return SUCCESS;
}
}
<!-根据参数生成list列表方法-->
public List get<XDtForm:className/>s() {
return <XDtForm:classNameLower/>s;
}
<!-根据参数生成list列表方法-->
public String list() {
<XDtForm:classNameLower/>s = <XDtForm:classNameLower/>Manager.get<XDt Form:className/>s(new <XDtForm:className/>());
return SUCCESS;
}
}
在开发时,一般需要 修改的就是Action类。此类在不同的项目会需要不同的模板,最基本的模板方法已经给出。我们可以在此完成一些修改,在方法的命名上可以参考原来代码中的例子即可。
当然,如果是想对此工具作进一步的了解,做大量自定义的开发的话 ,还是需要深入学习Xdoclet和maven的奥秘的!
愿与志同道合者共勉!