﻿<?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-住在井底的青蛙(Appfuse)-随笔分类-appfuse</title><link>http://www.blogjava.net/smallgoldstone/category/22480.html</link><description>smallgoldstone的Java Appfuse blog</description><language>zh-cn</language><lastBuildDate>Tue, 22 Jan 2008 12:31:02 GMT</lastBuildDate><pubDate>Tue, 22 Jan 2008 12:31:02 GMT</pubDate><ttl>60</ttl><item><title>appfuse1.9.4s使用ibatis时，修改用户的权限的错误</title><link>http://www.blogjava.net/smallgoldstone/archive/2008/01/22/177106.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Tue, 22 Jan 2008 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2008/01/22/177106.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/177106.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2008/01/22/177106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/177106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/177106.html</trackback:ping><description><![CDATA[<p>使用appfuse的时候orm使用ibatis的时候，如果修改用户的角色role，能够存到数据库的时候，只有一个角色会被存起来，经过下边的修改可以修复这个问题。<br />
private void addUserRoles(final User user) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (user.getRoles() != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator it = user.getRoles().iterator(); it.hasNext();) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Role role = (Role) it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map newRole = new HashMap();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newRole.put("userId", user.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newRole.put("roleId", role.getId());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List userRoles = getSqlMapClientTemplate().queryForList("getUserRoles", user);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (userRoles.isEmpty()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getSqlMapClientTemplate().update("addUserRole", newRole);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<span style="color: red">else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(!userRoles.contains(newRole)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getSqlMapClientTemplate().update("addUserRole", newRole);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
--by smallgoldstone</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/177106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2008-01-22 17:58 <a href="http://www.blogjava.net/smallgoldstone/archive/2008/01/22/177106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Appfuse1.9.4使用ajaxtag实现ajax翻页</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/12/26/170627.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 26 Dec 2007 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/12/26/170627.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/170627.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/12/26/170627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/170627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/170627.html</trackback:ping><description><![CDATA[<p>首先，到<a href="http://ajaxtags.sourceforge.net/">http://ajaxtags.sourceforge.net/</a>下载一份ajaxtag的分发包。<br />
<br />
然后是增加新的文件<br />
1、处理jar包<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复制分发包中lib目录下的jericho-html-2.4.jar和ajaxtags-1.3-beta-rc7.jar两个文件到appfuse/lib下，注意，同时你的appfuse的build.xml应该已经按我以前blog中做法修改过了，否则这两个库将不会被打包进war。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改appfuse\web\common下的taglibs.jsp文件，添加<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&lt;%@ taglib uri="http://ajaxtags.org/tags/ajax" prefix="ajax" %&gt;<br />
</span>2、处理js文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复制分发包web\js中的文件到appfuse\web\scripts下。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改web\decorators下的default.jsp文件增加<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/global.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/overlibmws/overlibmws.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/overlibmws/overlibmws_crossframe.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/overlibmws/overlibmws_iframe.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/overlibmws/overlibmws_hide.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/overlibmws/overlibmws_shadow.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/ajax/ajaxtags.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/ajax/ajaxtags_controls.js'/&gt;"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="&lt;c:url value='/scripts/ajax/ajaxtags_parser.js'/&gt;"&gt;&lt;/script&gt;<br />
</span>3、处理css<br />
&nbsp;&nbsp;&nbsp;&nbsp;复制web\css下的ajaxtags.css到appfuse/web/styles下<br />
&nbsp;&nbsp;&nbsp;&nbsp;修改web\styles下你的主题下的theme.css文件，我使用的主题是andreas01，所以修改web\styles\andreas01下的theme.css，增加<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">@import url(../ajaxtags.css);&nbsp;</span>&nbsp;&nbsp;&nbsp;<br />
4、处理图片<br />
&nbsp;&nbsp;&nbsp;&nbsp;复制分发包中web\img下的图片，不用再复制displaytag的图片了<br />
&nbsp;&nbsp;&nbsp;&nbsp;修改你styles下的ajaxtags.css文件，将里边的img/替换成images/<br />
<br />
<br />
接下来是修改你的appgen。同样，你的appgen应该是经过我以前的blog所说的修改过的。已经可以实现数据库的分页了。<br />
1、修改appfuse\extras\appgen\src\detailed下的Action.xdt文件，增加<br />
&nbsp;&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;* Action class to handle CRUD on a &lt;XDtForm:className/&gt; object<br />
&nbsp;*<br />
&nbsp;* @struts.action name="&lt;XDtForm:classNameLower/&gt;Form" path="/&lt;XDtForm:classNameLower/&gt;s" scope="request"<br />
&nbsp;*&nbsp; validate="false" parameter="method" input="mainMenu"<br />
&nbsp;<span style="color: red">* @struts.action name="&lt;XDtForm:classNameLower/&gt;Form" path="/ajax/&lt;XDtForm:classNameLower/&gt;s" scope="request"<br />
&nbsp;*&nbsp; validate="false" parameter="method" input="mainMenu"<br />
</span>&nbsp;* @struts.action name="&lt;XDtForm:classNameLower/&gt;Form" path="/edit&lt;XDtForm:className/&gt;" scope="request"<br />
&nbsp;*&nbsp; validate="false" parameter="method" input="list"<br />
&nbsp;* @struts.action name="&lt;XDtForm:classNameLower/&gt;Form" path="/save&lt;XDtForm:className/&gt;" scope="request"<br />
&nbsp;*&nbsp; validate="true" parameter="method" input="edit"<br />
&nbsp;* @struts.action-set-property property="cancellable" value="true"<br />
&nbsp;* @struts.action-forward name="edit" path="/WEB-INF/pages/&lt;XDtConfig:configParameterValue paramName="appModuleNameSlash"/&gt;&lt;XDtForm:classNameLower/&gt;Form.jsp"<br />
&nbsp;* @struts.action-forward name="list" path="/WEB-INF/pages/&lt;XDtConfig:configParameterValue paramName="appModuleNameSlash"/&gt;&lt;XDtForm:classNameLower/&gt;List.jsp"<br />
&nbsp;* @struts.action-forward name="listPage" path="/&lt;XDtForm:classNameLower/&gt;s.html" redirect="true"<br />
&nbsp;*/<br />
2、修改appfuse\extras\appgen\src下的List_jsp.xdt文件<br />
</p>
<p>&lt;XDtTagDef:tagDef namespace="Form" handler="org.example.antbook.xdoclet.FormTagsHandler"/&gt;&lt;%@ include file="/common/taglibs.jsp"%&gt;</p>
<p>&lt;title&gt;&lt;fmt:message key="&lt;XDtForm:classNameLower/&gt;List.title"/&gt;&lt;/title&gt;<br />
&lt;content tag="heading"&gt;&lt;fmt:message key="&lt;XDtForm:classNameLower/&gt;List.heading"/&gt;&lt;/content&gt;<br />
&lt;meta name="menu" content="&lt;XDtForm:className/&gt;Menu"/&gt;</p>
<p>&lt;c:set var="buttons"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type="button" style="margin-right: 5px"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onclick="location.href='&lt;c:url value="/edit&lt;XDtClass:className/&gt;.html"/&gt;'"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="&lt;fmt:message key="button.add"/&gt;"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;input type="button" onclick="location.href='&lt;html:rewrite forward="mainMenu"/&gt;'"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="&lt;fmt:message key="button.done"/&gt;"/&gt;<br />
&lt;/c:set&gt;</p>
<p>&lt;c:out value="${buttons}" escapeXml="false"/&gt;<br />
<span style="color: red">&lt;ajax:displayTag id="displayTagFrame" ajaxFlag="displayAjax" &gt;<br />
</span>&lt;display:table name="&lt;XDtForm:classNameLower/&gt;List" cellspacing="0" cellpadding="0"<br />
&nbsp;&nbsp;&nbsp; id="&lt;XDtForm:classNameLower/&gt;List" pagesize="25" class="table &lt;XDtForm:classNameLower/&gt;List"<br />
&nbsp;&nbsp;&nbsp; export="false" requestURI="<span style="color: red">ajax/&lt;XDtForm:classNameLower/&gt;s.html</span>"&gt;</p>
<p>&lt;XDtMethod:forAllMethods&gt;<br />
&nbsp; &lt;XDtMethod:ifHasMethodTag tagName="hibernate.id"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display:column property="&lt;XDtMethod:propertyName/&gt;" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="/edit&lt;XDtClass:className/&gt;.html" paramId="&lt;XDtMethodEx:idField getType="propertyName"/&gt;" paramProperty="&lt;XDtMethod:propertyName/&gt;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleKey="&lt;XDtForm:classNameLower/&gt;Form.&lt;XDtMethod:propertyName/&gt;"/&gt;<br />
&nbsp; &lt;/XDtMethod:ifHasMethodTag&gt;<br />
&nbsp; &lt;XDtMethod:ifHasMethodTag tagName="hibernate.property"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display:column property="&lt;XDtMethod:propertyName/&gt;" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; titleKey="&lt;XDtForm:classNameLower/&gt;Form.&lt;XDtMethod:propertyName/&gt;"/&gt;<br />
&nbsp; &lt;/XDtMethod:ifHasMethodTag&gt;<br />
&nbsp; &lt;/XDtMethod:forAllMethods&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display:setProperty name="paging.banner.item_name" value="&lt;XDtForm:classNameLower/&gt;"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display:setProperty name="paging.banner.items_name" value="&lt;XDtForm:classNameLower/&gt;s"/&gt;<br />
&lt;/display:table&gt;<br />
<span style="color: red">&lt;/ajax:displayTag&gt;<br />
</span>&lt;c:out value="${buttons}" escapeXml="false"/&gt;</p>
<p>&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp; highlightTableRows("&lt;XDtForm:classNameLower/&gt;List");<br />
&lt;/script&gt;<br />
同时还要删除掉排序的地方，否则按照字段排序点了以后会有问题。这个问题以后找到解决方案以后再改回来。<br />
<br />
3、修改appfuse\web\WEB-INF下的decorators.xml文件，在exclude中增加ajax前缀<br />
&lt;excludes&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pattern&gt;/resources/*&lt;/pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">&lt;pattern&gt;/ajax/*&lt;/pattern&gt;<br />
</span>&lt;/excludes&gt; <br />
<br />
最后用同样的方法修改user对应的userAction.java文件和userList.jsp两个文件，使用户管理的分页也可以是ajax样式的。<br />
这样就修改完成啦。^^，你用这个appfuse生成的项目，除了可以使用分页的功能以外，所有的ajaxtag的jsp标签都可以用了，要想知道都有什么，可以下载一个例子的war包放到tomcat下自己实际的看看就知道啦。现在你的新项目相当于已经集成了ajaxtag啦。<br />
<br />
--by smallgoldstone<br />
<br />
<br />
</p>
<p><br />
<br />
&nbsp;</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/170627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-12-26 16:20 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/12/26/170627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修正Appgen生成ibatis的sql文件的时候的两个bug</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/12/07/166029.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 07 Dec 2007 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/12/07/166029.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/166029.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/12/07/166029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/166029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/166029.html</trackback:ping><description><![CDATA[1、现象：updateParam的id位置不对，导致默认的时候修改不成功。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改办法：修改D:\appfuse-ibatis\extras\appgen\src\detailed\sql.xdt文件<br />
找到<br />
&lt;parameterMap id="updateParam" class="&lt;XDtForm:classNameLower/&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;XDtForm:forAllFields&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;XDtForm:ifIsNotIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property="&lt;XDtForm:fieldName/&gt;" jdbcType="&lt;XDtForm:jdbcType/&gt;" javaType="&lt;XDtForm:javaType/&gt;"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/XDtForm:ifIsNotIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;XDtForm:ifIsIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property="&lt;XDtForm:fieldName/&gt;" jdbcType="&lt;XDtForm:jdbcType/&gt;" javaType="&lt;XDtForm:javaType/&gt;"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/XDtForm:ifIsIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/XDtForm:forAllFields&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameterMap&gt;<br />
修改为<br />
&lt;parameterMap id="updateParam" class="&lt;XDtForm:classNameLower/&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;XDtForm:forAllFields&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;XDtForm:ifIsNotIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property="&lt;XDtForm:fieldName/&gt;" jdbcType="&lt;XDtForm:jdbcType/&gt;" javaType="&lt;XDtForm:javaType/&gt;"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/XDtForm:ifIsNotIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;&lt;/XDtForm:forAllFields&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;XDtForm:forAllFields&gt;<br />
</span>&nbsp;&nbsp;&nbsp; &lt;XDtForm:ifIsIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property="&lt;XDtForm:fieldName/&gt;" jdbcType="&lt;XDtForm:jdbcType/&gt;" javaType="&lt;XDtForm:javaType/&gt;"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/XDtForm:ifIsIdOrVersionField&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/XDtForm:forAllFields&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameterMap&gt;<br />
增加红色的2行。<br />
<br />
<br />
2、现象：添加一个新的对象以后，对象的id是错误的。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 解决办法：<br />
仍然是上边的文件，找到<br />
&lt;insert id="add&lt;XDtClass:className/&gt;" parameterMap="addParam"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--selectKey resultClass="java.lang.&lt;XDtMethodEx:idField getType="propertyType"/&gt;" keyProperty="&lt;XDtMethodEx:idField getType="propertyName"/&gt;" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT SEQ_&lt;XDtMethodEx:idField getType="columnName"/&gt;.NextVal AS &lt;XDtMethodEx:idField getType="propertyName"/&gt; FROM DUAL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/selectKey--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">&lt;selectKey resultClass="java.lang.&lt;XDtMethodEx:idField getType="propertyType"/&gt;" keyProperty="&lt;XDtMethodEx:idField getType="propertyName"/&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT LAST_INSERT_ID() AS &lt;XDtMethodEx:idField getType="propertyName"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/selectKey&gt;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff00ff">&lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into &lt;XDtClass:classTagValue tagName="hibernate.class" paramName="table"/&gt; (&lt;XDtForm:forAllFields&gt;&lt;XDtForm:ifIsNotIdOrVersionField&gt;&lt;XDtForm:columnName/&gt;&lt;XDtForm:ifIsNotLastField&gt;,&lt;/XDtForm:ifIsNotLastField&gt;&lt;/XDtForm:ifIsNotIdOrVersionField&gt;&lt;/XDtForm:forAllFields&gt;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values ( &lt;XDtForm:forAllFields&gt;&lt;XDtForm:ifIsNotIdOrVersionField&gt;?&lt;XDtForm:ifIsNotLastField&gt;,&lt;/XDtForm:ifIsNotLastField&gt;&lt;/XDtForm:ifIsNotIdOrVersionField&gt;&lt;/XDtForm:forAllFields&gt; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]]&gt;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;/insert&gt;<br />
这段，将红色的和紫色的位置对调。
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/166029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-12-07 14:24 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/12/07/166029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse1.9.4使用ibatis时碰到的问题</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/11/22/162320.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Thu, 22 Nov 2007 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/11/22/162320.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/162320.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/11/22/162320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/162320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/162320.html</trackback:ping><description><![CDATA[<p>使用appfuse的时候，如果orm使用的不是hibernate，而是ibatis的时候，使用appgen生成的代码，sql&nbsp; map文件会有问题，目前我发现了2个问题，一个是update，一个是insert。<br />
<br />
<br />
第一个会导致修改记录的时候，操作成功，但是数据库的记录确没有修改。导致发生的原因就是<br />
parameterMap id="updateParam"，这个id应该放在最后，而不是第一个。<br />
所以解决方案就是把id那个放到最后边<br />
<br />
<br />
第二个更隐蔽，我用了这么长的时间才发现，在你save一个新记录以后，使用那个记录的id是有错误的 ，不是那个记录的实际的id的值。导致原因是<br />
&lt;selectKey resultClass="java.lang.Integer" keyProperty="id"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT LAST_INSERT_ID() AS id<br />
&lt;/selectKey&gt;<br />
这个应该是在insert命令之后执行，但是生成的代码上边的是在insert之前执行的，导致了新的记录的pojo出现了id值是错误的</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/162320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-11-22 11:19 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/11/22/162320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nutch0.9爬虫io异常</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/10/02/150160.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Tue, 02 Oct 2007 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/10/02/150160.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/150160.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/10/02/150160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/150160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/150160.html</trackback:ping><description><![CDATA[前几天我在appfuse中加了quartz，现在准备在里边再加一个全文搜索，当然立刻想到了lucene，去了他的主页，发现还有好多现成的产品，比如nutch和solr，所以就准备先了解一下这两个项目，看看能不能再偷点懒<br />
<br />
所以先开始了解nutch，下载，按照文档，配置了，然后开始运行爬虫，去建立索引，结果总是失败，后来google才知道，nutch0.9用jdk1.6会有问题，我晕，我的就是1.6。知道了问题所在就好办了，下载了1.5，然后运行爬虫一切正常啦，但是现在还有一个问题就是中文乱码，现在没有时间继续弄了，改天有时间在继续吧。<br />
<br />
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/150160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-10-02 10:59 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/10/02/150160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>quartz备忘</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/30/149780.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Sun, 30 Sep 2007 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/30/149780.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/149780.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/30/149780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/149780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/149780.html</trackback:ping><description><![CDATA[刚刚使用了quartz，现在记录一下，以免以后忘记<br />
<br />
quartz有这么几个主要概念，job，jobdetail，trigger，scheduler<br />
<br />
job是一个接口，只有一个execute方法，在该任务被出发的时候被调用，每次运行，这个类都会被重新的实例化，所以不要用类变量保存什么数据，除非使用有状态的job，但是那样我感觉很麻烦。数据应该放到jobdetail的dataAsMap里边比较合适。<br />
<br />
jobdetail，是做一个封装，任务在scheduler中的名字和所属组都是在这个地方定义，还包括到时候要实例化的类。<br />
<br />
trigger就是一个定时器，有2种，一个是简单的，一个是cron的，满足条件了就触发，scheduler中，和他关联的jobdetail中的类就会被实例化而且开始运行。<br />
<br />
scheduler是一个核心的类，trigger和jobdetail都是放在这里边的，还有一些listener也是在这个地方注册。<br />
<br />
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/149780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-30 09:49 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/30/149780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从零开始使用appfuse做java   web开发</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/29/149489.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Sat, 29 Sep 2007 02:46:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/29/149489.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/149489.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/29/149489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/149489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/149489.html</trackback:ping><description><![CDATA[今天碰到一个刚开始用appfuse的人，他提的问题，让我想起来我刚开始用的时候，我的基础比他好一点，但是也要在网上好多地方搜索文章，我就想到我应该在我的blog上写一篇appfuse开始使用的文章。<br />
<br />
appfuse实际是一个给你建立项目的工具，并且还默认带的appgen工具，是为你的项目自动生成代码的工具，这些都是工具，这是他的本质，不是一个语言，他只是一个辅助工具，如果没有他你也可以根据自己的经验来简历起来同样的项目。建立起来的项目实际就是标准的 dao-service-web三层的架构的系统，使用流行的ssh构建。如果你都使用默认的话，他的持久层会使用hibernate，使用spring对dao和service层的bean进行管理。web层使用struts。<br />
<br />
具体怎么开始使用appguse呢？我下边就按照步骤一步步介绍。<br />
<br />
首先你要安装ant，tomcat和mysql。<br />
<br />
mysql的root密码为空，这样开发起来比较方便。<br />
<br />
注意你如果ant和tomcat使用的是zip包的，要记得设置环境变量ANT_HOME和CATALINA_HOME变量，并且要把他们下边的bin目录加到系统的PATH里边。<br />
<br />
然后解压appfuse。<br />
<br />
进入appfuse的文件夹，执行<br />
ant new<br />
然后他会问你，你要新建立项目的名字，这个可以随便起<br />
然后问你使用的数据库的名字，这个数据库是让你起名字，不是说你必须先在mysql中建立好，一会儿appfuse会帮你建立的。当然也可以随便起<br />
然后问你软件包的包名，这个就使用你公司的域名吧，一般都是这个习惯。你输入以后，所有的新建系统类都会属于这个包作为基包。<br />
然后会问你web层使用什么框架，默认是使用struts，我也比较习惯strtus，所以直接回车就可以啦。<br />
回答了这些问题以后appfuse就会自动的开始问你建立新的项目了。项目的文件夹会在和你的appfuse同级的目录下。<br />
来到你新建立的项目目录下边。<br />
执行<br />
ant setup<br />
这样他就会为你建立数据库，配置该配置的文件，给数据表中添加初始的数据。并且进行编译打包，部署。<br />
在执行了setup以后，你启动你的tomcat，你就会看到你的项目了。地址是<br />
http://localhost:8080/你的项目名<br />
比如刚才给你的项目起的是myapp,那么地址就是<br />
http://localhost:8080/myapp<br />
你就可以看到登录界面了，<br />
可以使用用户名tomcat密码tomcat登录，这个用户是普通用户，也就是默认的角色user<br />
还有一个admin用户，用户名是mraible，密码是tomcat<br />
<br />
里边已经带了功能有系统的用户管理，文件上传等功能。<br />
<br />
我下边在说一下appfuse生成项目的目录结构。<br />
<br />
源代码在src下，dao,service,web分别是3个层次的类的代码。web下边是一些配置文件的位置，在web的page目录里边是jsp文件的位置，WEB-INF 下边放着资源文件。<br />
<br />
struts的配置文件都是构建的时候通过xdoclet生成的，如果你要添加一些全局的配置可以添加到metadata\web目录下边的文件里边。<br />
<br />
好了，就写这些吧，我现在就能想起来这些。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/149489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-29 10:46 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/29/149489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse中加入quartz</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149379.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 28 Sep 2007 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149379.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/149379.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/149379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/149379.html</trackback:ping><description><![CDATA[其实在appfuse中添加quartz就是使用是平日那个而已，google的时候有很多的文档。<br />
<p>&lt;bean id="mainJobDetail"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;&lt;ref bean="jobManager"/&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;&lt;value&gt;flushJobToSched&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</p>
<p><br />
&nbsp;&nbsp;&nbsp; &lt;bean id="mainTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jobDetail" ref="mainJobDetail" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 10 seconds --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="startDelay" value="100000" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- repeat every 50 seconds --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="repeatInterval" value="60000" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;bean id="mainSchedFactroy" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="triggers"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;&lt;ref local="mainTrigger"/&gt;&lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</p>
其中我提几个注意的地方，作为自己的备忘吧，<br />
1、targetMethod的签名为空的，不是quartz的context，在调用的时候是不传参数进来的，所以要使用什么最好在spring中直接注入进来。<br />
2、scheduler是可以有多个jobdetail的，他可以同事调度多个job，一个job可以对应多个trigger，一个trigger只能对应一个job。<br />
scheduleJob添加，deleteJob删除。
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/149379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-28 23:02 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse中添加jar文件</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149377.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 28 Sep 2007 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149377.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/149377.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/149377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/149377.html</trackback:ping><description><![CDATA[在lib目录下添加自己的jar文件以后，war包中是没有的，所以要在build.xml文件的war标签里边添加这句&lt;lib dir="lib/" includes="*.jar"/&gt;，使war包中的lib下也能有我们自己加的jar文件。
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/149377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-28 22:57 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/28/149377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts-menu级联菜单的问题</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/16/145572.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Sun, 16 Sep 2007 12:03:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/16/145572.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/145572.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/16/145572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/145572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/145572.html</trackback:ping><description><![CDATA[<p>struts-menu在使用menu，item产生级联的菜单的时候，如果item的最后一项由于角色原因不显示，菜单的逻辑会发生错误，原因是少了一个&lt;/ul&gt;标签。<br />
所以在使用 的时候一定要注意最后一项要保证权限上能显示</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/145572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-16 20:03 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/16/145572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让appfuse更适合我</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145071.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 14 Sep 2007 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145071.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/145071.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145071.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/145071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/145071.html</trackback:ping><description><![CDATA[<p>我使用appfuse有一段时间了，期中有一些东西不怎么适合我，所以产生了对appfuse进行一些小的修改的念头，经过一个下午的努力，终于弄出来了适合我自己的appfuse版本。我这里边改的都是affpuse的皮毛，主要解决每次新建任务都要修改这些东西的困扰。现记录如下，以备后查。<br />
<br />
<strong>修改orm使用ibatis<br />
</strong><br />
appfuse默认是不使用ibatis的，而是使用的hibernate。修改方法如下：<br />
<br />
cd \项目目录\extras\ibatis\<br />
ant install<br />
ant unistall-hibernate<br />
<br />
<strong>去掉test<br />
<br />
</strong>去掉方法比较简单，只要修改build.xml文件，注释掉<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--javac srcdir="test/@{module}" debug="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${test.dir}/@{module}/classes"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path refid="@{module}.test.classpath"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path location="${build.dir}/@{module}/classes"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;options/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javac--&gt;<br />
这段就可以实现了。<br />
<br />
<strong>让user更&#8220;中国&#8221;<br />
<br />
</strong>appfuse自带的user属性太多，其中的大部分我写的系统都用不到，比如国家，我的系统估计就是中国人用，包括地址包括website，中国目前有几个有网站的呢。所以我要对user进行&#8220;塑身&#8221;，只保留他必要的属性。<br />
<br />
首先，修改数据库中的表。<br />
&nbsp;&nbsp;&nbsp;&nbsp;修改\metadata\sql\mysql-create-tables.sql文件，将其中的app_user表删除不必要的属性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;create table app_user (<br />
&nbsp;&nbsp;&nbsp; id int(11) not null auto_increment,<br />
&nbsp;&nbsp;&nbsp; username varchar(50) not null unique,<br />
&nbsp;&nbsp;&nbsp; version integer not null,<br />
&nbsp;&nbsp;&nbsp; password varchar(50),<br />
&nbsp;&nbsp;&nbsp; name varchar(50),<br />
&nbsp;&nbsp;&nbsp; email varchar(50) unique,<br />
&nbsp;&nbsp;&nbsp; phone_number varchar(20),<br />
&nbsp;&nbsp;&nbsp; account_enabled char(1),<br />
&nbsp;&nbsp;&nbsp; account_expired char(1),<br />
&nbsp;&nbsp;&nbsp; account_locked char(1),<br />
&nbsp;&nbsp;&nbsp; credentials_expired char(1),<br />
&nbsp;&nbsp;&nbsp; primary key (id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
然后，修改初始数据。<br />
&nbsp;&nbsp;&nbsp;&nbsp;修改\metadata\sql\sample-data.xml文件，将初始插入的数据也进行修改。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;row&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;user&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;536c0b339345616c1b33caf454454d8b8a190d6c&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Tomcat&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;matt_raible@yahoo.com&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;80210&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Y&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;N&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;N&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;N&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/row&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;row&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;2&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;admin&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;536c0b339345616c1b33caf454454d8b8a190d6c&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Matt&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;matt@raibledesigns.com&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;80210&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Y&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;N&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;N&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;N&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/row&gt;<br />
接下来修改ibatis的map文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;\src\dao\org\appfuse\dao\ibatis\sql\UserSQL.xml使ibatis中的映射和你的数据库表是匹配的。要修改文件中add，update和resultmap三个地方。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;resultMap id="userResult" class="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="id" column="id"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="username" column="username"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="password" column="password"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="name" column="name"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="email" column="email"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="phoneNumber" column="phone_number"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="version" column="version"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="enabled" column="account_enabled"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="accountExpired" column="account_expired"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="accountLocked" column="account_locked"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="credentialsExpired" column="credentials_expired"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--result property="roles" column="username" select="getUserRoles"/--&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/resultMap&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;insert id="addUser" parameterClass="user"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; app_user (username, password, name, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email, phone_number,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version, account_enabled, account_expired,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; account_locked, credentials_expired)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values (#username#, #password#, #name#, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #email#, #phoneNumber#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #version#, #enabled#, #accountExpired#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #accountLocked#, #credentialsExpired#);<br />
&nbsp;&nbsp;&nbsp; ]]&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;selectKey resultClass="java.lang.Long" keyProperty="id" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select last_insert_id();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/selectKey&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/insert&gt;<br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;update id="updateUser" parameterClass="user"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update app_user SET<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username = #username#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password = #password#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = #name#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email = #email#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phone_number = #phoneNumber#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version = #version#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; account_enabled = #enabled#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; account_expired = #accountExpired#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; account_locked = #accountLocked#,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; credentials_expired = #credentialsExpired#<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where id = #id#;<br />
&nbsp;&nbsp;&nbsp; ]]&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/update&gt;<br />
接下来就应该修改model了<br />
&nbsp;&nbsp;&nbsp;&nbsp;删除\src\dao\org\appfuse\model下的Address.java文件，修改User.java文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;protected Long id;<br />
&nbsp;&nbsp;&nbsp; protected String username;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // required<br />
&nbsp;&nbsp;&nbsp; protected String password;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // required<br />
&nbsp;&nbsp;&nbsp; protected String confirmPassword;<br />
&nbsp;&nbsp;&nbsp; protected String name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // required<br />
&nbsp;&nbsp;&nbsp; protected String email;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // required; unique<br />
&nbsp;&nbsp;&nbsp; protected String phoneNumber;<br />
&nbsp;&nbsp;&nbsp; protected Integer version;<br />
&nbsp;&nbsp;&nbsp; protected Set roles = new HashSet();<br />
&nbsp;&nbsp;&nbsp; protected boolean enabled;<br />
&nbsp;&nbsp;&nbsp; protected boolean accountExpired;<br />
&nbsp;&nbsp;&nbsp; protected boolean accountLocked;<br />
&nbsp;&nbsp;&nbsp; protected boolean credentialsExpired;<br />
&nbsp;&nbsp;&nbsp;&nbsp;保留这些属性，使这些属性和数据库中的表匹配。当然删除的属性的getter和setter方法也一并删除，并且要修改equals的函数，删除里边使用而且被我们删除的属性。<br />
最后就是修改jsp文件了，修改\web\pages\userForm.jsp文件，把里边删除了的字段在表单中也删除。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&lt;html:form action="saveUser" styleId="userForm" onsubmit="return validateUserForm(this)"&gt;<br />
&lt;html:hidden property="id"/&gt;<br />
&lt;html:hidden property="version"/&gt;<br />
&lt;input type="hidden" name="from" value="&lt;c:out value="${param.from}"/&gt;"/&gt;</p>
<p>&lt;c:if test="${cookieLogin == 'true'}"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;html:hidden property="password"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;html:hidden property="confirmPassword"/&gt;<br />
&lt;/c:if&gt;</p>
<p>&lt;c:if test="${empty userForm.username}"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="encryptPass" value="true"/&gt;<br />
&lt;/c:if&gt;</p>
<p>&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li class="buttonBar right"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%-- So the buttons can be used at the bottom of the form --%&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:set var="buttons"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:submit styleClass="button" property="method.save" onclick="bCancel=false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fmt:message key="button.save"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/html:submit&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:if test="${param.from == 'list' and param.method != 'Add'}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:submit styleClass="button" property="method.delete" onclick="bCancel=true; return confirmDelete('User')"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fmt:message key="button.delete"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/html:submit&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:if&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:cancel styleClass="button" onclick="bCancel=true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fmt:message key="button.cancel"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/html:cancel&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:set&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${buttons}" escapeXml="false"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li class="info"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:choose&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:when test="${param.from == 'list'}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;&lt;fmt:message key="userProfile.admin.message"/&gt;&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:when&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:otherwise&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;&lt;fmt:message key="userProfile.message"/&gt;&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:otherwise&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:choose&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;appfuse:label styleClass="desc" key="userForm.username"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:errors property="username"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:text styleClass="text large" property="username" styleId="username"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;c:if test="${cookieLogin != 'true'}"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="left"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;appfuse:label styleClass="desc" key="userForm.password"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:errors property="password"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:password styleClass="text medium" property="password" onchange="passwordChanged(this)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; styleId="password" redisplay="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;appfuse:label styleClass="desc" key="userForm.confirmPassword"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:errors property="confirmPassword"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:password styleClass="text medium" property="confirmPassword" styleId="confirmPassword" redisplay="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/c:if&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;appfuse:label styleClass="desc" key="userForm.name"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:errors property="name"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:text styleClass="text medium" property="name" styleId="name" maxlength="50"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="left"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;appfuse:label styleClass="desc" key="userForm.email"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:errors property="email"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:text styleClass="text medium" property="email" styleId="email"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;appfuse:label styleClass="desc" key="userForm.phoneNumber"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:errors property="phoneNumber"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:text styleClass="text medium" property="phoneNumber" styleId="phoneNumber"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&lt;c:choose&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;c:when test="${param.from == 'list' or param.method == 'Add'}"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;&lt;fmt:message key="userProfile.accountSettings"/&gt;&lt;/legend&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:checkbox styleClass="checkbox" property="enabled" styleId="enabled"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for="enabled" class="choice"&gt;&lt;fmt:message key="userForm.enabled"/&gt;&lt;/label&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:checkbox styleClass="checkbox" property="accountExpired" styleId="accountExpired"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for="accountExpired" class="choice"&gt;&lt;fmt:message key="userForm.accountExpired"/&gt;&lt;/label&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:checkbox styleClass="checkbox" property="accountLocked" styleId="accountLocked"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for="accountLocked" class="choice"&gt;&lt;fmt:message key="userForm.accountLocked"/&gt;&lt;/label&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:checkbox styleClass="checkbox" property="credentialsExpired" styleId="credentialsExpired"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for="credentialsExpired" class="choice"&gt;&lt;fmt:message key="userForm.credentialsExpired"/&gt;&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;&lt;fmt:message key="userProfile.assignRoles"/&gt;&lt;/legend&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:forEach var="role" items="${availableRoles}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html-el:multibox styleClass="checkbox" property="userRoles" styleId="${role.label}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${role.value}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/html-el:multibox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label class="choice" for="&lt;c:out value="${role.label}"/&gt;"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${role.label}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:forEach&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/c:when&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;c:when test="${not empty userForm.username}"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;strong&gt;&lt;fmt:message key="userForm.roles"/&gt;:&lt;/strong&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:forEach var="role" items="${userForm.roles}" varStatus="status"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${role.name}"/&gt;&lt;c:if test="${!status.last}"&gt;,&lt;/c:if&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="userRoles" value="&lt;c:out value="${role.name}"/&gt;"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/c:forEach&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:hidden property="enabled"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:hidden property="accountExpired"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:hidden property="accountLocked"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html:hidden property="credentialsExpired"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/c:when&gt;<br />
&lt;/c:choose&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li class="buttonBar bottom"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:out value="${buttons}" escapeXml="false"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/li&gt;<br />
&lt;/ul&gt;<br />
&lt;/html:form&gt;</p>
<p>我的系统禁止了自己注册，所以不用修改signup.jsp文件了。否则还要修改这个文件。<br />
<br />
<strong>除掉找回密码<br />
<br />
&nbsp;&nbsp;&nbsp;</strong>我在user中已经删除了passwordHint，说明我觉得对于我的系统找回密码是没有什么用处的，所以一并把页面和action也都删除了，还有在\web目录下的login.jsp文件中的链接都删除了，系统的找回密码功能就失灵了。<br />
<br />
<strong>删除自己注册功能<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</strong>我写的系统都不是开放的系统，所以自己注册的功能是用不上的，所以删除jsp页面，注册的链接不在/web/login.jsp中，而是在/web/pages/loginForm.jsp中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<strong>validate的电话号码规则不是中国的<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</strong>在添加用户的时候，总是提示电话号码格式不对，我看了一下电话号码的正则，他的格式是美国的格式，不是我们习惯的格式，所以对那个正则表达式有必要进行修改。<br />
修改文件\metadata\web\validation-global.xml文件，<br />
&lt;constant&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-name&gt;phone&lt;/constant-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant-value&gt;^(\(\d+\)){0,1}\d*-{0,1}\d+$&lt;/constant-value&gt;<br />
&nbsp;&lt;/constant&gt;<br />
把对电话的匹配成这样。<br />
<br />
<strong>使用appgen时候，生成新的，老的也会受到影响<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</strong>因为model要处理外键问题，所以在用appgen生成以后要做很多的修改，可以再生成一个新的table的时候，以前修改的那些就全回到最初了，这样是不是很郁闷呀，原因是middlegen的build.xml文件在生成新的时候没有对以前生成的那些文件进行清理，导致在复制的时候我们修改的文件就被覆盖了，所以修改\extras\middlegen\build.xml文件<br />
&lt;target name="all" description="Build and install everything" depends="clean,install"/&gt;<br />
加上clean，他就会自动清除了。这样在生成新的pojo的时候就不会影响老的了。<br />
<br />
<strong>让分页更合理<br />
<br />
</strong>appfuse默认使用的是数据全部取出，送到客户端然后进行分页和排序，这样做的弊端很多，在数据量非常大以后，就会出现问题了。所以分页应该是在数据库层做，不能到了客户端的浏览器才做。这个修改比较麻烦，需要修改的比较多我将用一个新的blog来记录。<br />
<br />
<strong>对displaytag的资源文件进行native2ascii<br />
<br />
</strong>在\build.xml文件中找到<br />
&lt;native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes="ApplicationResources_zh*.properties" encoding="UTF-8"/&gt;<br />
在后边照猫画虎的，添加<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes="displaytag_zh*.properties" encoding="UTF-8"/&gt;<br />
这样displaytag就不会产生乱码了。<br />
<br />
<br />
<br />
<br />
<br />
</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/145071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-14 10:47 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去掉appfuse的test</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145041.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 14 Sep 2007 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145041.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/145041.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/145041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/145041.html</trackback:ping><description><![CDATA[在使用appfuse1.9的时候，ant refresh会编译test里边的类，我基本不怎么使用test，所以准备去掉，通过对biuld.xml的分析，只要把这段注释掉就可以了<br />
&lt;!--javac srcdir="test/@{module}" debug="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${test.dir}/@{module}/classes"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path refid="@{module}.test.classpath"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;path location="${build.dir}/@{module}/classes"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/classpath&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;options/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javac--&gt;
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/145041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-09-14 09:38 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/09/14/145041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于appfuse的权限管理</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/07/05/128336.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Thu, 05 Jul 2007 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/07/05/128336.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/128336.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/07/05/128336.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/128336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/128336.html</trackback:ping><description><![CDATA[<p>appfuse的权限管理在security.xml文件中进行定义的，但是在修改关于user操作的权限的时候就要注意了，他不单单是通过url进行控制了，还使用aop分别在security.xml文件和applicationContext-service.xml文件中进行了限制。<br><br>sercurity.xml文件中<br>&nbsp;&nbsp;&nbsp;&lt;aop:config&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aop:advisor id="managerSecurity" advice-ref="methodSecurityInterceptor" pointcut="execution(* net.huangxl.neumail.service.UserManager.*(..))"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/aop:config&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;bean id="methodSecurityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="authenticationManager" ref="authenticationManager"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="accessDecisionManager" ref="accessDecisionManager"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="objectDefinitionSource"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; net.huangxl.neumail.service.UserManager.getUsers=admin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; net.huangxl.neumail.service.UserManager.removeUser=admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/value&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br>段对方法进行了保护，只有admin的用户可以访问。<br><br>除了这个以外，还有一个类，在service包中，叫做UserSecurityAdvice.java的类，也是对UserService访问进行控制的。<br>&lt;aop:config&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aop:advisor id="userManagerTx" advice-ref="userManagerTxAdvice" pointcut="execution(* *..service.UserManager.*(..))" order="0"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aop:advisor id="userManagerSecurity" advice-ref="userSecurityAdvice" pointcut="execution(* *..service.UserManager.saveUser(..))" order="1"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/aop:config&gt;<br></p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/128336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-07-05 14:34 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/07/05/128336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在appfuse上实现autocomplete</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/06/21/125606.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Thu, 21 Jun 2007 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/06/21/125606.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/125606.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/06/21/125606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/125606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/125606.html</trackback:ping><description><![CDATA[<p>在appfuse集成了dwr，查看web.xml文件中是不是已经把dwr的servlet加里边了，并且检查servletmapping是不已经对应到了/dwr了。<br>然后修改WEB-INF下的dwr.xml文件，<br>在allow中添加<br>&lt;convert match="net.huangxl.neumail.model.*" converter="bean"&gt;&lt;/convert&gt;<br>先把一些用户传数据的东西转化成能在网络上传输的东西。这里边converter是使用什么来进行转化，我这里边都是些pojo，可以使用bean来进行转化。<br>然后<br>&lt;create creator="spring" javascript="dwrManager"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;param name="beanName" value="dwrManager"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include method="getEmails"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include method="getAlia"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include method="getUsername"/&gt;<br>&lt;/create&gt;<br>创建一个类。<br>其中creator是创建的方法<br>new是dwr自己创建，spring是使用spring中的bean。<br>include是那些方法可以让js调用到。<br>这样以后，就可以访问<br>/yourapplication/dwr/<br>来测试工作是不是正常了。<br><br>之后就是写页面了<br>&lt;script src='&lt;%=request.getContextPath() + "/scripts/prototype.js" %&gt;' type="text/javascript"&gt;&lt;/script&gt;<br>&lt;script src='&lt;%=request.getContextPath() +&nbsp; "/scripts/scriptaculous.js"%&gt;' type="text/javascript"&gt;&lt;/script&gt;<br>&lt;script type='text/javascript' src='&lt;%=request.getContextPath() + "/dwr/interface/dwrManager.js"%&gt;'&gt;&lt;/script&gt;<br>&lt;script type='text/javascript' src='&lt;%=request.getContextPath() + "/dwr/engine.js"%&gt;'&gt;&lt;/script&gt;<br>&lt;script type='text/javascript' src='&lt;%=request.getContextPath() + "/dwr/util.js"%&gt;'&gt;&lt;/script&gt;<br>&lt;script type="text/javascript" src='&lt;%=request.getContextPath() + "/scripts/autocomplete.js"%&gt;'&gt;&lt;/script&gt;<br>&lt;script type="text/javascript"&gt;<br>function updateList(autocompleter, token) {</p>
<p>&nbsp;&nbsp; dwrManager.getEmails(token, function(data) {&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autocompleter.setChoices(data) </p>
<p>&nbsp;&nbsp; });<br>}<br>function nameValueSelector(tag){</p>
<p>&nbsp;&nbsp; return tag.email;</p>
<p>}<br>&lt;/script&gt;<br>&lt;input id="test" type="text" /&gt;<br>&lt;div id="testList" class="auto_complete"&gt;&lt;/div&gt;<br>&lt;script type="text/javascript"&gt;<br>&nbsp;&nbsp; new Autocompleter.DWR('test', 'testList', updateList,{ valueSelector: nameValueSelector, partialChars: 0 });<br>&lt;/script&gt;<br><br>还要把autocompleter的css加到页面里边。<br><br>这样就可以工作啦，简单吧^^<br></p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/125606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-06-21 16:39 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/06/21/125606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse使用ibatis的时候，生成的sqlmap文件中update的paramMap顺序有问题</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/06/20/125342.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 20 Jun 2007 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/06/20/125342.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/125342.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/06/20/125342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/125342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/125342.html</trackback:ping><description><![CDATA[<p>生成的sqlMap文件中的updateParam把id放到了第一个，对于update操作，最后一个才是id所以一定要调整一下那个map的顺序</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/125342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-06-20 14:38 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/06/20/125342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让appfuse使用ibatis</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/06/11/123395.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Mon, 11 Jun 2007 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/06/11/123395.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/123395.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/06/11/123395.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/123395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/123395.html</trackback:ping><description><![CDATA[###配置appgen<br>##cd extras\appgen 现在运行appgen，使用table来生成代码会报错。因为，我们已经删除了hibernate。但appgen会用到middlegen来读取数据库，而middlegen会使用到hibernate.因此需作如下改动<br>#将appfuse中的hibernate库文件拷贝到middlegen的lib目录下。cp appfuse\lib\hibernate-3.2 当前应用\extras\middlegen\lib\<br>#修伽middlegen下的build.xml文件，添加如下内容<br>&nbsp;&lt;property name="hibernate.dir" location="./lib/hibernate-3.2"/&gt;<br>&nbsp;&lt;property name="hibernate.jar" location="${hibernate.dir}/hibernate3.jar"/&gt;<br>&nbsp;&lt;path id="hibernate.classpath"&gt;<br>&nbsp;&nbsp;&lt;pathelement location="${hibernate.jar}"/&gt;<br>&nbsp;&nbsp;&lt;fileset dir="${hibernate.dir}/lib" includes="*.jar"/&gt;<br>&nbsp;&nbsp;&lt;pathelement location="${database.jar}"/&gt;<br>&nbsp;&nbsp;&lt;pathelement location="${commons-beanutils.jar}"/&gt;<br>&nbsp;&nbsp;&lt;pathelement location="${commons-lang.jar}"/&gt;<br>&nbsp;&nbsp;&lt;path location="${build.dir}/dao/classes"/&gt;<br>&nbsp;&lt;/path&gt;<br>#这时使用appgen，使用table来生成代码，会正常运行，在build目录下即可看见生成的代码。但是appgen默认会为hibernate和ibatis都生成相关代码。我们不想安装相关的hibernate代码，还需对appfuse的build.xml做出修改。<br>将&lt;target name="merge-config" depends="merge-tests,merge-menu,merge-hibernate,merge-ibatis"&gt;这行改为<br>&lt;target name="merge-config" depends="merge-tests,merge-menu,merge-ibatis"&gt;
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/123395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-06-11 15:11 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/06/11/123395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去掉appfuse显示日期时间的时候的秒后边的</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/06/10/123169.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Sun, 10 Jun 2007 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/06/10/123169.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/123169.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/06/10/123169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/123169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/123169.html</trackback:ping><description><![CDATA[修改service中的DateUtil.java文件getDateTimePattern()函数，就可以是你想要的格式啦^^
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/123169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-06-10 12:19 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/06/10/123169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决appfuse的appgen生成新的pojo时候以前的pojo会被重新生成的问题的办法</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/06/08/122898.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 08 Jun 2007 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/06/08/122898.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/122898.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/06/08/122898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/122898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/122898.html</trackback:ping><description><![CDATA[修改middlegen的build.xml文件<br>找到<br>&lt;target name="all" description="Build and install everything" depends="install"/&gt;<br>在depends上添加clean<br>&lt;target name="all" description="Build and install everything" depends="clean,install"/&gt;
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/122898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-06-08 17:35 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/06/08/122898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse生成的dao的list默认不是使用example进行list</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/20/118646.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Sun, 20 May 2007 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/20/118646.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/118646.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/20/118646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/118646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/118646.html</trackback:ping><description><![CDATA[appfuse生成的dao的list默认不是使用example进行list，要去掉他的注释，才是使用条件list
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/118646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-20 11:20 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/20/118646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse有一个标签是refresh，是执行clean，undeploy，deploy的</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/18/118356.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Fri, 18 May 2007 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/18/118356.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/118356.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/18/118356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/118356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/118356.html</trackback:ping><description><![CDATA[所以我前边有一个写给deploy加clean那个就没有必要了
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/118356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-18 14:31 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/18/118356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse中没有对displaytag的properties文件进行native2ascii</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117887.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117887.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117887.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117887.html</trackback:ping><description><![CDATA[appfuse的build.xml文件中只对ApplicationResources_*.properties进行了native2ascii，所以displaytag在页面会乱码，所以修改build.xml。<br>找到&lt;target name="copy-resources" depends="prepare"&nbsp;&nbsp; description="Copy .properties and .xml files from source directory"&gt;这段，然后在&lt;exclude name="ApplicationResources_pt*.properties"/&gt;下边添加<br>&lt;exclude name="displaytag_zh*.properties"/&gt;<br>在复制的时候不复制displaytag的properties文件。<br>在 &lt;native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes="ApplicationResources_zh*.properties" encoding="UTF-8"/&gt;下边添加<br>&lt;native2ascii src="web/WEB-INF/classes" dest="${build.dir}/web/classes" <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; includes="displaytag_zh*.properties" encoding="UTF-8"/&gt;<br>让ant对displaytag的资源文件native2ascii，并且直接放到build目录里边。<br><br>然后以后在deploy的时候，这样displaytag就不会出现乱码了。
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 17:07 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如果数据库的表的字段是datetime类型要注意</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117858.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117858.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117858.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117858.html</trackback:ping><description><![CDATA[<p align=left>如果数据表的字段类型是datetime，那么生成的pojo是Timestmap类型，要手工改成Date类型，否则在view层复制属性的时候会有异常。</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 15:38 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编译出错，原因字符串过长</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117823.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117823.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117823.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117823.html</trackback:ping><description><![CDATA[appgen在使用table生成pojo的时候，如果你数据表中有字段是text类型的，生成的测试数据的字符串会过长，如果用eclipse打开那个文件，会现在为空字符串，要用记事本或者别的文本编辑器，把dao，service，action的test类都进行修改。
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 13:47 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在appfuse的pojo中，validator问题 </title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117803.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117803.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117803.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117803.html</trackback:ping><description><![CDATA[<p><font face=Arial>每个pojo至少要有一个属性有@struts.validator标签，否则valigation.xml文件中没有这个form，可以加一条这个</font></p>
<p><font face=Arial>@struts.validator type="required"</font></p>
<p>&nbsp;</p>
<p>否则就要自己修改valigation.xml文件，添加这个form</p>
<p>&nbsp;</p>
<p>如果没有会抛出异常</p>
<pre>javax.servlet.jsp.JspException: No form found under 'xwForm' in locale 'zh_CN'
at org.apache.struts.taglib.html.JavascriptValidatorTag.renderJavascript(JavascriptValidatorTag.java:384)
at org.apache.struts.taglib.html.JavascriptValidatorTag.doStartTag(JavascriptValidatorTag.java:349)
at org.apache.jsp.WEB_002dINF.pages.xwForm_jsp._jspx_meth_html_005fjavascript_005f0(xwForm_jsp.java:608)
at org.apache.jsp.WEB_002dINF.pages.xwForm_jsp._jspService(xwForm_jsp.java:132)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:375)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at net.huangxl.sgsnews.webapp.filter.GZIPFilter.doFilterInternal(GZIPFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at net.huangxl.sgsnews.webapp.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.opensymphony.clickstream.ClickstreamFilter.doFilter(ClickstreamFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:108)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:193)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:834)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286)
at java.lang.Thread.run(Unknown Source)
</pre>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 12:08 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse建立的项目，要注意资源文件的编码问题 </title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117801.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117801.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117801.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117801.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>建立以后要在eclipse里边把文件的编码改成utf8</p>
            <p>否则会产生乱码。</p>
            <p>&nbsp;</p>
            <p>我的new一个项目以后就是乱码的，所以要手工的把文件从appfuse文件夹拷贝到我的项目文件夹下。</p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 12:07 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在网上看到pojo的名字的第二个字母不要大写，否则会发生错误 </title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117802.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117802.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117802.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117802.html</trackback:ping><description><![CDATA[<p>网上看到的，我还没有试验，</p>
<p>&nbsp;</p>
<p>也没有找发生错误的原因</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 12:07 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用appfuse发现了一个问题 </title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117800.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117800.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117800.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117800.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117800.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>看了一些appfuse的文档，使用ant new生成项目以后，继续向下做。</p>
            <p>在ant new以后，目录换到自己项目的目录，然后执行ant&nbsp; setup，这有个地方要注意，mysql的<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#108;&#111;&#99;&#97;&#108;&#104;&#111;&#115;&#116;">root@localhost</a>用户的密码要为空。</p>
            <p>setup以后，mysql数据库中会有你项目的数据库了，然后把表添加到数据库中，这次很凑巧，我想写一个新闻系统，我的表明就为news了，然后切换到extras/appgen/目录下，执行ant install-detailed。应该将列表都能生成。</p>
            <p>但是却碰到了一个错误</p>
            <p><font face=Arial>BUILD FAILED<br>D:\sgsnews\extras\appgen\build.xml:323: Warning: Could not find file D:\sgsnews\<br>extras\appgen\build\gen\web\pages\NewsListTemp.jsp to copy.<br></font><font face=Arial>错误信息是这样的。在网上找google，但是只能google到一条，还看不太懂，好像上边还没有说解决的方法。</font></p>
            <p><font face=Arial>由我同事的启发，发现了一个问题，就是appgen在使用table生成pojo的时候使用middlegen，但是它生成的pojo是new.java，而不是预期的news.java。但是appgen认为生成的是news.java，结果就出现了上边的问题。所以在使用appgen生成的时候尽量不要使用以s结尾的单词作为表名。</font></p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 12:06 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装appfuse</title><link>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117799.html</link><dc:creator>smallgoldstone</dc:creator><author>smallgoldstone</author><pubDate>Wed, 16 May 2007 04:05:00 GMT</pubDate><guid>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117799.html</guid><wfw:comment>http://www.blogjava.net/smallgoldstone/comments/117799.html</wfw:comment><comments>http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117799.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smallgoldstone/comments/commentRss/117799.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smallgoldstone/services/trackbacks/117799.html</trackback:ping><description><![CDATA[<p>刚知道appfuse的时候，感觉他应该和RoR差不多，感觉应该是RoR的java版本，但是上了他的官方网站才知道，appfuse是一个从2003年就开始的项目。目前，他到底有多好用，或者有多不好用我在不知道，看了一些文档，感觉用起来应该不难，其实appfuse说是安装有点不妥当，因为他就是一个压缩包，解压缩就可以了，但是还有一些环境需要配置。</p>
<p>首先，在使用appfuse之前，要安装一些依赖的软件，jdk不用说了，mysql，ant，tomcat，这些软件都是appfuse需要的。</p>
<p>其次，我的ant和tomcat都是解压缩版的，所以还要添加几个环境变量。appfuse需要的环境变量有JAVA_HOME，ANT_HOME，CATALINA_HOME分别指向jdk目录，ant目录，tomcat目录。</p>
<p>然后，在环境变量的PATH里边把ant的bin目录加到里边。</p>
<p>最后在appfuse目录下执行ant new就可以生成自己的项目啦。</p>
<p>&nbsp;</p>
<p>现在就到生成项目，一会儿继续。</p>
<img src ="http://www.blogjava.net/smallgoldstone/aggbug/117799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smallgoldstone/" target="_blank">smallgoldstone</a> 2007-05-16 12:05 <a href="http://www.blogjava.net/smallgoldstone/archive/2007/05/16/117799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>