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

??????而在這個(gè)文件里是不能加的,我測(cè)試的在WINDOWS XP下沒有問題,但是到WINDOWS 2000下就會(huì)報(bào)錯(cuò)。
2. iBATIS的SQL MAP文件的updata語句的輸入parameterMap有錯(cuò)。
??????Appfuse會(huì)把id屬性生成為第一個(gè),而updata statment中是按照順序來取參數(shù)的,一般情況下id屬性都是作為最后一個(gè)參數(shù)被傳入,所以會(huì)報(bào)錯(cuò)。如下代碼:
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,有一個(gè)屬性為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應(yīng)該是在最后傳進(jìn)去。
??????我對(duì)Appfuse研究時(shí)間也不長,就發(fā)現(xiàn)這兩個(gè)bug,可能STRUTS+SPRING+HIBERNATE用的人最多吧,WEBWORK和iBATIS用的人比較少,存在BUG的可能性比較大,不過作為學(xué)習(xí)其實(shí)還是希望碰到些BUG,沒有BUG也不能叫程序了,希望Appfuse能發(fā)展的更好,真是感慨和佩服作者對(duì)各種框架的了解程度。
??????吐血推薦:Appfuse!