﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-上善若水-文章分类-Code Engine</title><link>http://www.blogjava.net/bourn/category/25428.html</link><description> 反者道之动，弱者道之用。
 天下万物生于有，有生于无。</description><language>zh-cn</language><lastBuildDate>Tue, 06 Nov 2007 11:26:43 GMT</lastBuildDate><pubDate>Tue, 06 Nov 2007 11:26:43 GMT</pubDate><ttl>60</ttl><item><title>Code Engine使用手册V1.3</title><link>http://www.blogjava.net/bourn/articles/143997.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Mon, 10 Sep 2007 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/143997.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/143997.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/143997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/143997.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/143997.html</trackback:ping><description><![CDATA[<p style="text-align: center;" align="center"><strong><span style="font-size: 14pt;">Version 1.3</span></strong></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><strong><span><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span></strong><strong><span style="font-family: 宋体;">基本组成：</span></strong></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span><span>a)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">运行入口</span>CodeEngineRunner<span style="font-family: 宋体;">的</span>main<span style="font-family: 宋体;">（）；里面注册所有的</span>Generator<span style="font-family: 宋体;">；主要有：</span>IbatisGenerator<span style="font-family: 宋体;">，</span>ControllerGenerator<span style="font-family: 宋体;">，</span>JSPGenerator<span style="font-family: 宋体;">三个；任意一个可以单独运行多次；</span></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span><span>b)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">代码结构：</span>*Generator,<span style="font-family: 宋体;">用于生成</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">和</span>sqlmap<span style="font-family: 宋体;">，</span>controller<span style="font-family: 宋体;">等文件，在生成之后为了保持系统的完整性，通常会调用一些</span>Modifier<span style="font-family: 宋体;">去修改配置文件；由于每个</span>Generator<span style="font-family: 宋体;">会单独再次访问配置文件，所以可以单独和重复生成；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>c)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">主要的配置文件有</span>2<span style="font-family: 宋体;">个，位于</span>code_engine<span style="font-family: 宋体;">目录下，分别为：</span>code-engine-config.xml<span style="font-family: 宋体;">，</span>code-engine-gears.xml<span style="font-family: 宋体;">，但在实际使用中，我们经常要配置的是</span>code-engine-gears.xml<span style="font-family: 宋体;">，前者一般在项目开始的时候设定，后者用来生成和修改</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">和</span>sqlmap, controller<span style="font-family: 宋体;">，</span>jsp<span style="font-family: 宋体;">和相关的一些配置文件；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>d)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">模板文件位于</span>template<span style="font-family: 宋体;">文件夹下面；可以任意添加和调用；语法为</span>freemarker<span style="font-family: 宋体;">，但是，通常只需参照其他模板文件，一般都可以写出新模板；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>e)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">每次运行</span>codeengine<span style="font-family: 宋体;">都会在</span>backup<span style="font-family: 宋体;">目录下面生成备份文件，以备再次生成和修改；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>f)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">生成日志在</span>logs<span style="font-family: 宋体;">目录下；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>g)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span>Framework<span style="font-family: 宋体;">目录是框架目录，可重用部分，在生成新项目时候拷贝用；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>h)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span>Reference<span style="font-family: 宋体;">目录是一些开发组件，主要是写</span>js<span style="font-family: 宋体;">组件；</span></p>
<p><span>2.<strong> code-engine-config.xml
</strong></span><strong><span style="font-family: 宋体;">配置简介</span></strong><span style="font-family: 宋体;">：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml
version="1.0" encoding="UTF-8"?&gt;</span></p>
<p>&lt;codeEngineConfiguration&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;context&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&lt;distDir
path="D:"wiczone"trunk"wiczone" java="src"
web="war"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;distDir path="D:"test"trunk"project"
java="src" web="war"/&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;distDir path="build" java="src"
web="war"/&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;templateDir path="template"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;i18nSupport&gt;true&lt;/i18nSupport&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;database
classPath="lib"mysql-connector-java-3.1.7-bin.jar"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;driverClass&gt;org.gjt.mm.mysql.Driver&lt;/driverClass&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;url&gt;jdbc:mysql://localhost:3306/wiczone&lt;/url&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;username&gt;root&lt;/username&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;password&gt;root&lt;/password&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/database&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;package base="biz.wic" app="application"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;package base="biz.web"
app="framework"&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;domain&gt;domain&lt;/domain&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;controller&gt;web&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;manager&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;service&gt;service&lt;/service&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/package&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;web layoutComponent="tiles"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;WEB-INF"applicationContext-manager.xml&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;lucene&gt;WEB-INF"applicationContext-lucene.xml&lt;/lucene&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;servlet&gt;WEB-INF"action-servlet.xml&lt;/servlet&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;security&gt;WEB-INF"applicationContext-acegi.xml&lt;/security&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;sqlMapConfig&gt;WEB-INF"sql-map-config.xml&lt;/sqlMapConfig&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;messages&gt;WEB-INF"classes"messages.properties&lt;/messages&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;WEB-INF"defs&lt;/tiles&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;jdbc&gt;WEB-INF"jdbc.properties&lt;/jdbc&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/web&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/context&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>IMPORTANT NOTES:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>1.in most cases, we no necessary to modify the &lt;context/&gt; part,
since we have already set done;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>2.each of controller/jsp can be re-created alternatively.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>3.please becareful that metadata's character case.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>4.the basis rule is:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>if not existed we will created;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>if already existed we may overwrited;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p>&lt;/codeEngineConfiguration&gt;</p>
<p style="margin-left: 39pt; text-indent: -18pt;">1）&nbsp;<span style="font-family: 宋体;">如上所示，</span>&lt; database &gt; <span style="font-family: 宋体;">用于配置数据库的连接，注意要保证</span>driver<span style="font-family: 宋体;">能访问到；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">2）&nbsp;&lt;Package&gt;<span style="font-family: 宋体;">负责生成各种代码使用，</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">3）&nbsp;&lt;web&gt;<span style="font-family: 宋体;">用于指定一些配置文件；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">4）&nbsp;<span style="font-family: 宋体;">以上文件通常在项目开始的时候设定；</span></p>
<p>&lt;context&gt;<span style="font-family: 宋体;">详解</span></p>
<p style="margin-left: 21pt; text-indent: 21pt;">a<span style="font-family: 宋体;">）</span><span>&lt;distDir
path="build" java="src" web="war"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;distDir path="D:"dist_project" java="src"
web="war"/&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;templateDir path="template"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;i18nSupport&gt;true&lt;/i18nSupport&gt;</span></p>
<p>distDir@path<span style="font-family: 宋体;">指目标项目的路径，&#8216;</span>build<span style="font-family: 宋体;">&#8217;是相对路径；</span> @java<span style="font-family: 宋体;">指</span>java source code<span style="font-family: 宋体;">的根目录；</span></p>
<p>@web<span style="font-family: 宋体;">指</span>web application<span style="font-family: 宋体;">的根目录；</span></p>
<p>templateDir@path<span style="font-family: 宋体;">指</span>freemarker template<span style="font-family: 宋体;">所在的目录，这里设定的是</span>$Code_Engin$"template; <span style="font-family: 宋体;">此目录下放置用于生成</span>controller<span style="font-family: 宋体;">和</span>jsp<span style="font-family: 宋体;">的模板文件（以</span>ftl<span style="font-family: 宋体;">为文件后缀）；</span></p>
<p>template /lib/<span style="font-family: 宋体;">下面放置的一个</span>common.ftl<span style="font-family: 宋体;">为通用的</span>functions<span style="font-family: 宋体;">，已经用</span>auto imports<span style="font-family: 宋体;">引入，要调用</span>common.ftl<span style="font-family: 宋体;">的</span>function<span style="font-family: 宋体;">，通常类似：</span><span>&lt;@ce.dosth param=paramObj
/&gt;, ce</span><span style="font-family: 宋体;">是</span>namespace<span style="font-family: 宋体;">，用于限定引用；具体代码见（</span>BaseGenerator.java<span style="font-family: 宋体;">）</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">5）&nbsp;i18nSupport<span style="font-family: 宋体;">是指定</span>jsp<span style="font-family: 宋体;">是否支持多语言；一般设定为支持的；</span></p>
<p><span>&lt;package base="biz.wic"
app="application"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&lt;domain&gt;domain&lt;/domain&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;controller&gt;web&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;manager&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;service&gt;service&lt;/service&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/package&gt;</span></p>
<p><span style="font-family: 宋体;">用于设定</span>java code<span style="font-family: 宋体;">的</span>package<span style="font-family: 宋体;">；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&lt;web
layoutComponent="tiles"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;WEB-INF"applicationContext-manager.xml&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;servlet&gt;WEB-INF"jbcc-servlet.xml&lt;/servlet&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;security&gt;WEB-INF"applicationContext-acegi.xml&lt;/security&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;sqlMapConfig&gt;WEB-INF"sql-map-config.xml&lt;/sqlMapConfig&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;messages&gt;WEB-INF"classes"messages.properties&lt;/messages&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;WEB-INF"defs&lt;/tiles&gt;</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">6）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/web&gt;</p>
<p>3.<strong>code-engine-gears.xml</strong><strong><span style="font-family: 宋体;">配置详解：</span></strong></p>
<p><span>&lt;?xml version="1.0"
encoding="UTF-8"?&gt;</span></p>
<p>&lt;gears&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>Generate model, related sqlmap manager file via abator, in most case we
don't need modify the abator-config.xml;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>just add the following model node will work;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>and this model node can create more than one;&nbsp;model name should be unique;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>default extends is : biz.web.framework.domain.BaseEntity</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;model name="city_model" table="city"
domain="City" usingLucene="false"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>extends="biz.web.framework.domain.BaseEntity" keyProperty="id"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>Create *Controller and *MgrController, modify layout component like
Tiles of Sitemesh;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>modify action-servlet.xml, applicationContext-*.xml</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>defaultMethods@keyProperty default to "id"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;controller name="City" springBeanDef="true"
template="controller.ftl"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;managers&gt;CityMgr&lt;/managers&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;services
support="MailService"&gt;&lt;/services&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;defaultMethods refModel="city_model"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="index" style="form"
view="list_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="listAll" style="ajax" /&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="list" style="ajax" /&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="get" style="ajax"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/defaultMethods&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&nbsp;using the option
[extends] to generated Mgr controller,</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>overwrite default to true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>method view default to</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;controller name="CityMgr" springBeanDef="true"
template="controller_mgr.ftl"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extends="City"
overwrite="true"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;services support="CompassService"&gt;&lt;/services&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;defaultMethods refModel="city_model"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="manager" style="form"
view="list_mgr_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="update" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="create" style="form" view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="save" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="edit" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="delete" style="ajax"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/defaultMethods&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!-- overwrite default to true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>jsp name attribute used for jsp file name, and also used for tiles
definition</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;jsp name="list_mgr_city" refController="CityMgr"
template="list_mgr_jsp.ftl" overwrite="false"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;main_layout_4&lt;/tiles&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/jsp&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;jsp name="edit_city" refController="CityMgr"
template="edit_jsp.ftl" overwrite="false"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tinyMCE&gt;content&lt;/tinyMCE&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tiles&gt;main_layout_4&lt;/tiles&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/jsp&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;jsp name="detail_recommend"
refController="City" template="detail_jsp.ftl"
overwrite="false"&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tinyMCE&gt;content&lt;/tinyMCE&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tiles&gt;main_layout_1&lt;/tiles&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;/jsp&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--overwrite default to true;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;jsp name="list_city" refController="City"
template="list_jsp.ftl" overwrite="false"&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tiles&gt;main_layout_2&lt;/tiles&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;/jsp&gt;--&gt;</span></p>
<p>&lt;/gears&gt;</p>
<p>1<span style="font-family: 宋体;">）</span>&lt;model&gt; &lt;controller&gt;&lt;jsp&gt; <span style="font-family: 宋体;">等节点用于生成</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">，</span>controller<span style="font-family: 宋体;">和</span>jsp<span style="font-family: 宋体;">，可配置</span>0-n<span style="font-family: 宋体;">个；次序随意</span>; <span style="font-family: 宋体;">且每个节点都有可选属性</span> overwrite <span style="font-family: 宋体;">（</span>true<span style="font-family: 宋体;">、</span>false<span style="font-family: 宋体;">）；</span></p>
<p>overwrite<span style="font-family: 宋体;">指定当目标</span>controller<span style="font-family: 宋体;">文件存在时，是否要覆写该文件，否则就生成</span>.generated<span style="font-family: 宋体;">为后缀的文件；</span>overwrite<span style="font-family: 宋体;">属性是可选的，默认为</span>true<span style="font-family: 宋体;">；</span></p>
<p>2<span style="font-family: 宋体;">）</span><span>&lt;controller name="CityMgr"
springBeanDef="true" template="controller_mgr.ftl"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extends="City"
overwrite="true"&gt;</span></p>
<p style="margin-left: 42pt;">&lt;managers&gt;CityMgr&lt;/managers&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;services
support="CompassService"&gt;&lt;/services&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;defaultMethods refModel="city_model"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="manager" style="form"
view="list_mgr_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="update" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="create" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="save" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="edit" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="delete" style="ajax"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/defaultMethods&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/controller&gt;</span></p>
<p><span style="font-family: 宋体;">这个配置看上去有些复杂，是为了提供更好的灵活性；</span>name<span style="font-family: 宋体;">用于在</span>code engine<span style="font-family: 宋体;">中标识</span>controller<span style="font-family: 宋体;">，同时用于生成的</span>controller.java<span style="font-family: 宋体;">的命名；在配置文件中应该是唯一的；</span></p>
<p>springBeanDef<span style="font-family: 宋体;">用于指出是否在相关的配置文件中添加</span>spring bean<span style="font-family: 宋体;">的定义，比如</span>xxx-servlet.xml<span style="font-family: 宋体;">等；否则只是生成</span>controller<span style="font-family: 宋体;">的</span>java<span style="font-family: 宋体;">；</span></p>
<p>template<span style="font-family: 宋体;">指定</span>freemarker<span style="font-family: 宋体;">模板；</span></p>
<p>managers<span style="font-family: 宋体;">指定要注入</span>manager<span style="font-family: 宋体;">定义；如果有多个用逗号分割；可选；</span></p>
<p>services<span style="font-family: 宋体;">指定要注入</span>service<span style="font-family: 宋体;">定义；如果有多个用逗号分割；</span>@support<span style="font-family: 宋体;">用于指定</span>framework<span style="font-family: 宋体;">下的</span>common service<span style="font-family: 宋体;">，比如</span>mail<span style="font-family: 宋体;">，</span>compass<span style="font-family: 宋体;">等；可选；</span></p>
<p>defaultMethods<span style="font-family: 宋体;">里面用于指定生成的</span>controller<span style="font-family: 宋体;">里面的方法；</span>refModel <span style="font-family: 宋体;">指参照的</span>model<span style="font-family: 宋体;">定义，</span> method@name<span style="font-family: 宋体;">用于指定方法名，比如</span>list<span style="font-family: 宋体;">，而且</span>list<span style="font-family: 宋体;">方法是预定义写在模板里面的</span>; method@style<span style="font-family: 宋体;">指定代码风格，可选有</span>form<span style="font-family: 宋体;">，</span>ajax<span style="font-family: 宋体;">两种；这个风格会同时影响</span>cotroller<span style="font-family: 宋体;">部分和</span>jsp<span style="font-family: 宋体;">部分；</span></p>
<p>method@view<span style="font-family: 宋体;">指方法返回的</span>tiles<span style="font-family: 宋体;">定义视图，当然这个属性在</span>style<span style="font-family: 宋体;">是</span>form<span style="font-family: 宋体;">的时候有效；可选；</span></p>
<p>e<span style="font-family: 宋体;">）</span>
<span>&lt;jsp name="edit_user" refController="UserMgr"
template="edit_jsp.ftl" &gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tinyMCE&gt;Description&lt;/tinyMCE&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;main_layout_1&lt;/tiles&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/jsp&gt;</span></p>
<p>Jsp<span style="font-family: 宋体;">的</span>name<span style="font-family: 宋体;">用于生成的</span>jsp<span style="font-family: 宋体;">页面的文件名，同时还是</span>tiles<span style="font-family: 宋体;">的定义，在生成</span>controller<span style="font-family: 宋体;">时候也是有用的；</span></p>
<p>refController<span style="font-family: 宋体;">就是指明</span>jsp<span style="font-family: 宋体;">所参照的</span>controller<span style="font-family: 宋体;">定义；通过这个</span>refController<span style="font-family: 宋体;">，</span>jsp<span style="font-family: 宋体;">可以找到</span>default_methods<span style="font-family: 宋体;">的</span>style<span style="font-family: 宋体;">，</span>refModel<span style="font-family: 宋体;">等信息；</span></p>
<p>Template<span style="font-family: 宋体;">指明所使用的</span>freemarker<span style="font-family: 宋体;">模板；</span></p>
<p><span style="font-family: 宋体;">这里省略了</span>overwrite<span style="font-family: 宋体;">属性，</span>overwrite<span style="font-family: 宋体;">属性是可选的，默认为</span>true<span style="font-family: 宋体;">；</span></p>
<p>tinyMCE<span style="font-family: 宋体;">指定要加入</span>tinyMCE<span style="font-family: 宋体;">支持，同时，所管理的属性为&#8216;</span>Description<span style="font-family: 宋体;">&#8217;；</span> <span style="font-family: 宋体;">可选属性；</span></p>
<p>tiles<span style="font-family: 宋体;">属性定义了，此</span>jsp<span style="font-family: 宋体;">所</span>extend<span style="font-family: 宋体;">的</span>layout<span style="font-family: 宋体;">，可选属性；</span></p>
<p>f) </p>
<p><span>&lt;model name="city_model"
table="city" domain="City" usingLucene="false"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>extends="biz.web.framework.domain.BaseEntity"
keyProperty="id"/&gt;</span></p>
<p><span style="font-family: 宋体;">用于生成</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">，和</span>sqlmap<span style="font-family: 宋体;">，可以配置多个；</span></p>
<p>luceneSupport<span style="font-family: 宋体;">可选，如为</span>true<span style="font-family: 宋体;">代表将在</span>domain<span style="font-family: 宋体;">和</span>manager<span style="font-family: 宋体;">以及配置文件中加入</span>lucene<span style="font-family: 宋体;">的支持；</span></p>
<p>4.<strong><span style="font-family: 宋体;">创建新项目</span></strong></p>
<p>A.<span style="font-family: 宋体;">从</span>codeEngineRunner<span style="font-family: 宋体;">开始执行</span>createNewProject<span style="font-family: 宋体;">（&#8220;</span>distProject<span style="font-family: 宋体;">&#8221;）；（将</span>copy<span style="font-family: 宋体;">必需的框架文件到目标目录，同时修改</span>jdbc.properties<span style="font-family: 宋体;">等文件，同时将初始化</span>abator-config.xml<span style="font-family: 宋体;">；）</span></p>
<p>B<span style="font-family: 宋体;">．分别用到了</span>JDBCPropertiesModifier<span style="font-family: 宋体;">和</span>CodeEngineInitModifier<span style="font-family: 宋体;">；</span></p>
<p>C<span style="font-family: 宋体;">．执行目标工程</span>project<span style="font-family: 宋体;">目录下的</span>initdb.bat;<span style="font-family: 宋体;">初始化数据库，加载初始系统表和数据；当然执行此步骤之前要先创建数据库；</span></p>
<p>D<span style="font-family: 宋体;">．利用</span>codeEngineRunner<span style="font-family: 宋体;">的从数据库表，生成相应的文件后，使用</span>project<span style="font-family: 宋体;">目录下</span>build.bat<span style="font-family: 宋体;">编译文件；</span></p>
<img src ="http://www.blogjava.net/bourn/aggbug/143997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-09-10 14:47 <a href="http://www.blogjava.net/bourn/articles/143997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Code Engine基本技术demo2</title><link>http://www.blogjava.net/bourn/articles/142384.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Mon, 03 Sep 2007 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/142384.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/142384.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/142384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/142384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/142384.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体;">关于如何生成字段的编辑页面；</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">首先应该读取</span>domain<span style="font-family: 宋体;">对象，从而获取</span>field<span style="font-family: 宋体;">列表；</span></p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp; /**</p>
<p style="margin-left: 18pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp; * getDomainFields via jsp name, and should
remove the super fields, like lastUpdatedBy, lastUpdatedDate</span></p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp; * @param name of jsp</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp; * @return list of field</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp; */</p>
<p style="margin-left: 18pt;"><span>&nbsp;&nbsp;&nbsp; public static List&lt;Field&gt;
getDomainFields(String name) {</span></p>
<p style="margin-left: 18pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;Field&gt; ret = new
ArrayList&lt;Field&gt;();</span></p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</p>
<p style="margin-left: 18pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class clz =
Class.forName(CodeEngineConfig.getDomainPackage() + "." +</span></p>
<p style="margin-left: 18pt;"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>CodeEngineConfig.getControllerDomain(CodeEngineConfig.getJspRef(name)));</span></p>
<p style="margin-left: 18pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Field field :
clz.getDeclaredFields()) {</span></p>
<p style="margin-left: 18pt;"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>if(!"lastUpdateDate".equalsIgnoreCase(field.getName())</span></p>
<p style="margin-left: 18pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;
!"lastUpdateBy".equalsIgnoreCase(field.getName())){</span></p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret.add(field);</p>
<p style="margin-left: 18pt;"><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("field.getName() + field.getType() = " +
(field.getName() + field.getType()));</span></p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret;</p>
<p style="margin-left: 18pt;">&nbsp;&nbsp;&nbsp; }</p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">将</span>Field List<span style="font-family: 宋体;">传递给</span>freemarker<span style="font-family: 宋体;">模板；之所以要传递</span>field<span style="font-family: 宋体;">而不仅仅是</span>name<span style="font-family: 宋体;">的原因是，因为希望在模板里根据</span>field<span style="font-family: 宋体;">的</span>type<span style="font-family: 宋体;">，从而生成不同的</span>html<span style="font-family: 宋体;">，比如</span>date<span style="font-family: 宋体;">可以生成使用</span>js calendar<span style="font-family: 宋体;">的，</span>boolean<span style="font-family: 宋体;">生成</span>radio<span style="font-family: 宋体;">，或</span>checkbox<span style="font-family: 宋体;">，其他的生成</span>text<span style="font-family: 宋体;">；</span></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span><span>a)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">定义</span>macro<span style="font-family: 宋体;">；</span></p>
<p>&lt;#macro getHtml field&gt;</p>
<p>&nbsp;&lt;#if field.type?ends_with('Boolean')&gt;</p>
<p><span>&lt;input type="radio"
id="${field.name}" name="${field.name}"
class="inp_txt_30" size="80"
value="${'$'}{${domain?uncap_first + '.' + field.name}}"&gt;</span></p>
<p>&nbsp;&lt;#elseif field.type?ends_with('Date')&gt;</p>
<p><span>&lt;input type="text"
id="${field.name}" name="${field.name}"
readonly="readonly" class="inp_txt_30" size="17"
value="&lt;fmt:formatDate value="${'$'}{${domain?uncap_first + '.' +
field.name}}" pattern="yyyy-MM-dd hh:mm"/&gt;"&gt;</span></p>
<p><span>&lt;button id="${field.name}Btn"
class="button" &gt;...&lt;/button&gt;</span></p>
<p><span>&lt;script
type="text/javascript"&gt;</span></p>
<p>Calendar.setup(</p>
<p>{</p>
<p>inputField&nbsp;: "${field.name}",&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;// id of the input field</p>
<p><span>ifFormat<span>&nbsp;&nbsp;&nbsp;
</span>: "%Y-%m-%d %H:%M",<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// the date format</span></p>
<p>showsTime: true,</p>
<p><span>button<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>: "${field.name}Btn"<span>&nbsp;&nbsp;&nbsp;
</span>// id of the button</span></p>
<p>}</p>
<p>);</p>
<p>&lt;/script&gt;</p>
<p>&nbsp;&lt;#elseif field.type?ends_with('Text')&gt;</p>
<p><span>&lt;textarea id="${field.name}"
name="${field.name}" rows="15" cols="80"
style="width: 100%"&gt;${'$'}{${domain?uncap_first + '.' +
field.name}}&lt;/textarea&gt;</span></p>
<p>&nbsp;&lt;#else&gt;</p>
<p><span>&lt;input type="text"
id="${field.name}" name="${field.name}"
class="inp_txt_30" size="80" value="${'$'}{${domain?uncap_first
+ '.' + field.name}}"&gt;</span></p>
<p>&nbsp;&lt;/#if&gt;</p>
<p>&lt;/#macro&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<span style="font-family: 宋体;">）调用</span>macro<span style="font-family: 宋体;">生成</span>html<span style="font-family: 宋体;">；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;#list fields! as field&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td
class="txt_tit_s" &gt;&lt;spring:message code="${lbl + '.' +
domain?uncap_first + '.' + field.name}"/&gt;&lt;/td&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;@getHtml
field=field/&gt;&lt;/td&gt;</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/#list&gt;</span></p>
<img src ="http://www.blogjava.net/bourn/aggbug/142384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-09-03 17:12 <a href="http://www.blogjava.net/bourn/articles/142384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Code Engine基本技术demo</title><link>http://www.blogjava.net/bourn/articles/141672.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Fri, 31 Aug 2007 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141672.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141672.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141672.html</trackback:ping><description><![CDATA[<p>Code Engine <span style="font-family: 宋体;">主要用来生成</span>web<span style="font-family: 宋体;">相关的代码，可以把</span>orm<span style="font-family: 宋体;">的部分集成进来，形成一条完整的生产线；</span></p>
<p><span style="font-family: 宋体;">利用</span>xpath<span style="font-family: 宋体;">，</span>freemarker<span style="font-family: 宋体;">等技术，使得用户通过</span>xml<span style="font-family: 宋体;">配置文件，模板等简单的方式，快速开发代码和根据需求调整模板；</span></p>
<p>Dom4j<span style="font-family: 宋体;">对实现了</span>xpath 1.0<span style="font-family: 宋体;">，</span> <span style="font-family: 宋体;">非常的好用；</span></p>
<p><span style="font-family: 宋体;">所需</span>jar <span style="font-family: 宋体;">：</span>dom4j-1.6.1.jar<span style="font-family: 宋体;">，</span> jaxen-1.1-beta-7.jar</p>
<p>Code<span style="font-family: 宋体;">：</span></p>
<p>import junit.framework.TestCase;</p>
<p>import org.dom4j.*;</p>
<p>import org.dom4j.io.SAXReader;</p>
<p>import java.util.List;</p>
<p>import java.util.Iterator;</p>
<p>import java.io.File;</p>
<p>/**</p>
<p><span>&nbsp;*
Created by IntelliJ IDEA.</span></p>
<p><span>&nbsp;*
User: duanbin</span></p>
<p><span>&nbsp;*
Date: 2007-8-15</span></p>
<p><span>&nbsp;*
Time: 9:47:17</span></p>
<p><span>&nbsp;* To
change this template use File | Settings | File Templates.</span></p>
<p>&nbsp;*/</p>
<p>public class XPathTest extends TestCase {</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void testXPathViaDom4jXpathV1() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>printSelectedNodeValue("D:""xpath""src""test.xml");</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>/**</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>* </span><span style="font-family: 宋体;">利用</span>XPath<span style="font-family: 宋体;">操作</span>XML<span style="font-family: 宋体;">文件，打印指定节点或者属性的值</span>, using xpath 1.0</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>*</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>* @param filename String </span><span style="font-family: 宋体;">待操作的</span>XML<span style="font-family: 宋体;">文件（相对路径或者绝对路径）</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>*/</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void printSelectedNodeValue(String filename) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>try {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>SAXReader saxReader = new SAXReader();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Document document = saxReader.read(new File(filename));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>List list;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>list =
document.selectNodes("//qn1:college/@leader[.!='leader1']");</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>for (Object aList : list) {</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute =
(Attribute) aList;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("//qn1:college/@leader:&nbsp;" + attribute.getValue());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">打印所有</span>student<span style="font-family: 宋体;">节点的属性</span>age<span style="font-family: 宋体;">值，如果有的话</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("/students/student/@age");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute attribute =
(Attribute) aList;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("/students/student/@age</span><span style="font-family: 宋体;">：</span>" + attribute.getValue());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">打印所有</span>college<span style="font-family: 宋体;">节点值，如果有的话</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("/students/student");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList1 : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element bookElement = (Element)
aList1;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator iterator =
bookElement.elementIterator("college");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iterator.hasNext()) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element titleElement =
(Element) iterator.next();</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("/students/student/college</span><span style="font-family: 宋体;">：</span>" + titleElement.getText());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">测试节点的一些方法</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("//city");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList2 : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element titleElement =
(Element) aList2;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("//telephone</span><span style="font-family: 宋体;">：</span><span>getName:" +
titleElement.getName());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getNodeType:" +
titleElement.getNodeType());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getTextTrim:" +
titleElement.getTextTrim());</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("&nbsp;##getNamespaceURI:" +
titleElement.getNamespaceURI());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getNodeTypeName:" +
titleElement.getNodeTypeName());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getQualifiedName:" +
titleElement.getQualifiedName());</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print("&nbsp;##getUniquePath:" +
titleElement.getUniquePath());</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;##getPath:" + titleElement.getPath());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>//</span><span style="font-family: 宋体;">打印所有</span>name<span style="font-family: 宋体;">节点值，如果有的话，与上面</span>college<span style="font-family: 宋体;">的取法不一样</span></p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list =
document.selectNodes("/students/student/name");</span></p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iter = list.iterator();</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Object aList3 : list) {</p>
<p>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element titleElement = (Element)
aList3;</span></p>
<p><span>//<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>System.out.println("/students/student/name</span><span style="font-family: 宋体;">：</span>" + titleElement.getText());</p>
<p>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>} catch (Exception ex) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>ex.printStackTrace();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>Test.xml:</p>
<p><span>&lt;?xml version="1.0"
encoding="UTF-8"?&gt;</span></p>
<p><span>&lt;students
xmlns:qn1="http://qn1.com"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student age="259911911911"&gt;&lt;!--</span><span style="font-family: 宋体;">如果没有</span>age<span style="font-family: 宋体;">属性，默认的为</span>20--&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;qn1:name&gt;</span><span style="font-family: 宋体;">崔卫兵</span>&lt;/qn1:name&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;college&gt;PC</span><span style="font-family: 宋体;">学院</span>&lt;/college&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;62354666&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">男</span>,1982<span style="font-family: 宋体;">年生</span>,<span style="font-family: 宋体;">硕士，现就读于北京邮电大学</span>&lt;/notes&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;addr&gt;&lt;city&gt;Beijing&lt;/city&gt;&lt;/addr&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;name&gt;cwb&lt;/name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;qn1:college leader="</span><span style="font-family: 宋体;">学院领导</span>"&gt;PC<span style="font-family: 宋体;">学院</span>&lt;/qn1:college&gt;&lt;!--<span style="font-family: 宋体;">如果没有</span>leader<span style="font-family: 宋体;">属性，默认的为</span>leader--&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;62358888&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">男</span>,1987<span style="font-family: 宋体;">年生</span>,<span style="font-family: 宋体;">硕士，现就读于中国农业大学</span>&lt;/notes&gt;</p>
<p>&nbsp;&nbsp; &nbsp;&lt;/student&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;name&gt;xxxxx&lt;/name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;college leader=""&gt;xxx</span><span style="font-family: 宋体;">学院</span>&lt;/college&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;66666666&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">注视中，注释中</span>&lt;/notes&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/student&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;student age="9911911911"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;name&gt;yyyyyy&lt;/name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;qn1:college leader="leader1"&gt;yyyy</span><span style="font-family: 宋体;">学院</span>&lt;/qn1:college&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;telephone&gt;88888888&lt;/telephone&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;notes&gt;</span><span style="font-family: 宋体;">注视中</span>111<span style="font-family: 宋体;">，注释中</span>222&lt;/notes&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/student&gt;</span></p>
<p>&lt;/students&gt;</p>
<p>Freemarker<span style="font-family: 宋体;">基本示例：</span></p>
<p>import freemarker.template.Configuration;</p>
<p><span>import
freemarker.template.DefaultObjectWrapper;</span></p>
<p>import freemarker.template.Template;</p>
<p>import java.io.File;</p>
<p>import java.io.Writer;</p>
<p>import java.io.OutputStreamWriter;</p>
<p>import java.io.FileOutputStream;</p>
<p>import java.util.Map;</p>
<p>import java.util.HashMap;</p>
<p>import org.apache.log4j.Logger;</p>
<p>/**</p>
<p><span>&nbsp;*
Created by IntelliJ IDEA.</span></p>
<p><span>&nbsp;*
User: duanbin</span></p>
<p><span>&nbsp;*
Date: 2007-8-21</span></p>
<p><span>&nbsp;*
Time: 22:30:13</span></p>
<p><span>&nbsp;* To
change this template use File | Settings | File Templates.</span></p>
<p>&nbsp;*/</p>
<p>public abstract class BaseGenerator {</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected Configuration cfg;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected final Logger logger = Logger.getLogger(this.getClass());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public BaseGenerator() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>try {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg = getConfiguration(CodeEngineConfig.getTemplateDir());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>} catch (Exception e) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>e.printStackTrace();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public abstract void generate();</span></p>
<p><span>&nbsp;&nbsp;&nbsp; protected
void generateFile(String template, Map root, String fileName){</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>try {</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File dist = new File(fileName);</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fos = new
FileOutputStream(dist);</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer out = new
OutputStreamWriter(fos);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writer out2 = new
OutputStreamWriter(System.out);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg.getTemplate(template).process(root, out);</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.flush();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("Generated
File: "&nbsp;+ fileName);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>} catch (Exception e) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>e.printStackTrace();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>}</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected Configuration getConfiguration(String tempDir) throws
Exception {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Configuration cfg = new Configuration();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// Specify the data source where the template files come from.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// Here I set a file directory for it:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg.setDirectoryForTemplateLoading(</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(tempDir));</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// Specify how templates will see the data model. This is an advanced
topic...</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>// but just use this:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>cfg.setObjectWrapper(new DefaultObjectWrapper());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>return cfg;</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p><span style="font-family: 宋体;">模板文件示例：</span></p>
<p>package ${package}.application.web;</p>
<p><span>import
biz.web.framework.web.BaseController;</span></p>
<p>&lt;#list managers! as mgr&gt;</p>
<p>import ${package}.application.manager.${mgr};</p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list services! as svc&gt;</p>
<p><span>import
${package}.application.service.${svc};</span></p>
<p>&lt;/#list&gt;</p>
<p>/**</p>
<p><span>&nbsp;*
Created by IntelliJ IDEA.</span></p>
<p><span>&nbsp;*
User: ${author!'admin'}&nbsp;"${r"${build.dir}"}&nbsp;"${'$'}{cfg.startDate}</span></p>
<p><span>&nbsp;*
Date: Sep 1, 2006</span></p>
<p><span>&nbsp;*
Time: 9:19:17 AM</span></p>
<p><span>&nbsp;* To
change this template use File | Settings | File Templates.</span></p>
<p>&nbsp;*/</p>
<p><span>public class ${name}Controller extends
BaseController {</span></p>
<p>&lt;#list managers! as mgr&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected ${mgr} ${mgr?uncap_first};</span></p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list services! as svc&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>protected ${svc} ${svc?uncap_first};</span></p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list managers! as mgr&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void set${mgr}(${mgr} ${mgr?uncap_first}) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>this.${mgr?uncap_first} = ${mgr?uncap_first};</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&lt;/#list&gt;</p>
<p>&lt;#list services! as svc&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>public void set${svc}(${svc} ${svc?uncap_first}) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>this.${svc?uncap_first} = ${svc?uncap_first};</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&lt;/#list&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;
</span>public ModelAndView list${name}(HttpServletRequest request,
HttpServletResponse response) throws Exception {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>ModelAndView mav = new
ModelAndView("update_${name?uncap_first}");</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Long user = getUserId();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>mav.addObject("userId", user);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>return mav;</span></p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>} </p>
<img src ="http://www.blogjava.net/bourn/aggbug/141672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-31 11:38 <a href="http://www.blogjava.net/bourn/articles/141672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 Selenium 测试 Ajax 项目</title><link>http://www.blogjava.net/bourn/articles/141549.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141549.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141549.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141549.html</trackback:ping><description><![CDATA[<p><br></p>
<p>&nbsp;Selenium <br>
是一个由ThoughtWorks做的专门为web应用所做的非常有效的功能测试工具。Selenium <br>
的 tests <br>
直接在浏览器里跑，就像用户真的在操作一样。Selenium <br>
可运行 Windows, Linux, 和 Macintosh
的各种浏览器， 如 <br>
Internet Explorer, Mozilla 和 Firefox。 <br>
....... </p>
<p>访问链接： <br>
<a href="http://forum.springside.org.cn/viewthread.php?tid=195&amp;extra=page%3D1" target="_blank">http://forum.springside.org.cn/viewthread.php?tid=195&amp;extra=page%3D1</a>
</p>
<br> <img src ="http://www.blogjava.net/bourn/aggbug/141549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 23:06 <a href="http://www.blogjava.net/bourn/articles/141549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>