??????就象SpringSide的Wiki文檔,我覺得是不可不讀的好東西,雖然不深入,但基本上涵蓋了現(xiàn)在最好用的技術并給予了重點突出的講述。但SpringSide跟Appfuse比起來在規(guī)模上還是有相當大的差距,就從框架而言Appfuse基本上涵蓋了所有的主流框架的組合。并且Appfuse對框架封裝的更少,生成的代碼更容易學習。我覺得這是SpringSide從某個角度來講不太好的地方。Appfuse的Wiki中文頁也在不斷的完善中,所以如果你想學習那些最好最流行的東西吐血推薦玩一玩Appfuse(用Appfuse真的象玩一樣,跑一跑腳本程序就好了,呵呵)。
??????利用春節(jié)在家的時間也剛好因為一個項目的原因比較全面的學習了一下Appfuse,確實滿好用的。我用的是WebWork2+Spring2+iBATIS2的組合,對于簡單需求基本上能完成80%+的代碼,不過也發(fā)現(xiàn)了兩處比較嚴重的BUG,貼出來大家注意一下,也免得自己忘記了。
??????我使用的是appfuse-webwork-1.9.4的版本,使用WebWork2+Spring2+iBATIS2組合。
?1. 生成的WebWork2部分的一個定義驗證器的文件有錯。
??????即WEB-INF/classes/validators.xml文件,Appfuse把它象用戶自定義的驗證文件一樣加了一個dtd標簽:

??????而在這個文件里是不能加的,我測試的在WINDOWS XP下沒有問題,但是到WINDOWS 2000下就會報錯。
2. iBATIS的SQL MAP文件的updata語句的輸入parameterMap有錯。
??????Appfuse會把id屬性生成為第一個,而updata statment中是按照順序來取參數(shù)的,一般情況下id屬性都是作為最后一個參數(shù)被傳入,所以會報錯。如下代碼:
1
????<parameterMap?id="updateParam"?class="tbaccidentType">
2??????????????<parameter?property="typeid"?jdbcType="INTEGER"?javaType="java.lang.Integer"/>
3
??????????<parameter?property="name"?jdbcType="VARCHAR"?javaType="java.lang.String"/>
4
????</parameterMap>

2??????????????<parameter?property="typeid"?jdbcType="INTEGER"?javaType="java.lang.Integer"/>
3

4

??????這張表中主鍵為typeid,有一個屬性為name,而updata statment代碼如下:
1
????<update?id="updateTbaccidentType"?parameterMap="updateParam">
2
????<![CDATA[
3
????????update?tbaccident_type?set
4
???????????????????name?=??
5
????????where?typeid?=??
6
????]]>
7
????</update>

2

3

4

5

6

7

??????很顯然,id應該是在最后傳進去。
??????我對Appfuse研究時間也不長,就發(fā)現(xiàn)這兩個bug,可能STRUTS+SPRING+HIBERNATE用的人最多吧,WEBWORK和iBATIS用的人比較少,存在BUG的可能性比較大,不過作為學習其實還是希望碰到些BUG,沒有BUG也不能叫程序了,希望Appfuse能發(fā)展的更好,真是感慨和佩服作者對各種框架的了解程度。
??????吐血推薦:Appfuse!