vulcan
低頭做事,抬頭看路
::
首頁
::
聯系
::
聚合
::
管理
41 Posts :: 7 Stories :: 28 Comments :: 0 Trackbacks
隨筆分類
Java
隨筆檔案
2010年11月 (2)
2009年6月 (1)
2009年5月 (1)
2008年7月 (3)
2008年5月 (2)
2008年4月 (1)
2008年3月 (3)
2008年2月 (1)
2008年1月 (4)
2007年12月 (11)
2007年11月 (5)
2007年10月 (5)
2007年8月 (2)
文章分類
DotNet學習(1)
Java編程(1)
Linux/Solaris操作系統(1)
Python編程(2)
Web技術(1)
技術關注
文章檔案
2007年11月 (3)
2007年10月 (1)
2007年8月 (1)
博客
Hi, Ivy
豬姐姐的博客
Why I can?
My blogger
搜索
最新評論
1.?re: 也說漢字轉拼音
你好,能不能發一份源代碼?ziven000@163.com
謝謝
--hikaruxx
2.?re: 終于搞定了Openvpn
評論內容較長,點擊標題查看
--yewj
3.?re: 終于搞定了Openvpn
@aa
+號貌似是正則表達式里的一個通配符 表示任意一個字符
--fxmy
4.?re: 使用Windows Live Writer向BlogJava發布博客
評論內容較長,點擊標題查看
--樊紀信
5.?re: 終于搞定了Openvpn[未登錄]
還有請問下,eth0 是公網接口嗎
--aa
閱讀排行榜
1.?終于搞定了Openvpn(5393)
2.?關于iptables -m state出現invalid argument的解決方法(2341)
3.?Webwork JSON支持(2245)
4.?也說漢字轉拼音(2205)
5.?簡簡單單的說WebService(1245)
SpringSide,哇
去年的一個問題,后來項目時間緊就擱下了,采用了替代方案,但是總覺得不那么完美,今年升級開發,想解決了,然后才有了這個想法。之前也知道SpringSide,但是沒有想過取看,今天因為一個問題搜google,居然發現我之前對于java web開發的一些想法居然和SpringSide一樣!又多了解了一下,發現這個項目的貢獻者都是國內jee開發領域的高手,所以呢,肯定比我的那些實現完美得多。暫時放下自己的代碼,好好看看SpringSide源代碼,因為想法有些一致,那么看起來肯定會很愉快的,如果全部和我的胃口,那么就轉到SpringSide了,如果不完全合我胃口,那么就把我關心的一些代碼搞明白后,選擇性吸收進項目了。
下面是讀代碼的一些感受:
(1) DAO的實現挺對我胃口的,比較喜歡。我的范型DAO是從Hibernate網站上取下來改進的。主要增加了一個可以接收List<Criterion>的重載方法還有分頁的功能。List類型的Criterion,方便了在上層靈活的利用添加條件,而不用每次都去轉成數組,傳給原本只接受可變參數的方法;分頁和Order的支持操作比我的實現優雅得多。不過卻希望可以給范型DAO的主鍵也增加一個范型參數,因為對于復合主鍵的參數傳入,如果有一個類型安全檢查可能要好一些。
(2) 先有雞還是先有蛋的問題,這個問題可能是我理解得不清楚還是Struts2的機制變了。看到SpringSide2中core.web包中有一個Struts的支持類,支持了基本的CRUD操作,這個問題,我卻之前沒有想過,導致有好多很簡單的,但是又不得不寫代碼和配置的webwork Action。于是我就想著給webwork也寫了這樣一個支持類。正好springside3中有對Struts2的一個支持類,參考了一下,struts2和webwork的關系想必大家都知道。應該有可以借鑒的東西。不過借鑒過來之后,發現行不通有問題,后來居然是一個先有蛋還是先有雞的問題:因為攔截器的配置順序。在springside3的struts2支持類中,實體的根據id從數據庫載入或者新建放在了prepare方法中,而這個prepare是使用了一個要求子類重載的getId方法,毫無疑問,在我們通常的使用中,getId肯定是從表單參數中獲取的,所以也就意味著webwork的param攔截器必須在prepare攔截器之前,由于使用了prepare來準備entity,那么model-driven攔截器必須在prepare攔截器之后,不過webwork model driven要能正常工作,實際上,model-driven又必須是在param攔截器之前,在使用ognl進行參數注入之前,必須先通過model-driven攔截器把實體準備好!這就形成了一個先有蛋還是先有雞的問題了。不知道是不是我理解webwork還不夠深入,這個問題如果是采用prepare來做這個工作,那么這個問題是無解的。最終,我還是按照自己的理解做了一個,提供一個getId()默認實現,并且在getId()方法中,不依賴于param攔截器,而是直接從ActionContext中獲取提交的表單Id參數,如下的代碼:
/** */
/**
* for the webwork ognl injection of parameter
* 默認情況下,將把傳遞過來的參數轉換成Integer類型,
* 如果不是這種情況,則需要在子類中重載該方法
*
@param
id
*/
@SuppressWarnings(
"
unchecked
"
)
public
void
setId(Serializable id)
{
//
如果范型ID的定義不是Array類型,但是卻取到了Array類型的值
//
那么可以斷定這是由于頁面傳遞過來的被webwork認成了Array類型了
//
這個時候,需要把Array類型的參數值取出來
//
這種情況僅僅在這個范型父類中存在,在具體類中不存在這種情況
//
而是參數類型可以被webwork自動轉換到相應的類型
//
一般沒有ID取值為Array的情況
if
(id
instanceof
String[])
{
String[] idArray
=
(String[])id;
if
(idArray.length
>
0
)
{
//
從List類型的參數中取出具體類型的Id
id
=
Integer.valueOf(idArray[
0
]);
}
}
//
ID should never be ZERO -
//
cope with default value of the primitive types
if
(id
instanceof
Integer
&&
!
new
Integer(
0
).equals(id))
{
this
.id
=
id;
}
}
/** */
/**
* getId of the entity, if this.id is null, try get from
* action context first
*
@return
*/
protected
Serializable getId()
{
if
(
this
.id
==
null
)
{
//
try to get parameter from the actioncontext
ActionContext context
=
ActionContext.getContext();
Map params
=
context.getParameters();
Object id
=
params.get(this.idParamName);
if
(id
!=
null
)
{
//
if the parameter is not null,
//
set Id parameter
setId((Serializable)id);
}
}
return
this
.id;
}
并且還需要提供一個setIdParamName()方法,這樣就可以在webwork配置中注入idParamName了。
當然還可以這樣做:
把springside3中struts支持類中prepare做的工作分散到幾個crud操作方法中。首先在:input方法中,根據id是否有值,新建或者從數據庫中load一個entity,這是在插入或者更新一個entity之前的操作;而getModel方法中直接放了一個創建一個entity instance的方法,因為model-driven主要是拿來做表單參數接收的,所以是否從數據庫中load一個entity其實是無所謂的,反正會被表單參數全部覆蓋。不過要是可以在getModel()方法之前知道是對哪個entity進行的操作,然后load該對象,就可以在表單中只傳遞部分屬性值了。按照model-driven必須在param攔截器之前的原則,除非把要編輯的entityId放在session而不是頁面參數中,然后在getModel方法中預先判斷是否是該Action的編輯操作,而load該entity。
posted on 2008-03-18 10:40
vulcan
閱讀(367)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Copyright @ vulcan
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster
主站蜘蛛池模板:
亚洲精品国精品久久99热
|
亚洲人成人无码网www国产
|
亚洲老熟女五十路老熟女bbw
|
亚欧洲精品在线视频免费观看
|
亚洲日韩精品无码一区二区三区
|
可以免费看黄的网站
|
免费一看一级毛片人
|
黄色短视频免费看
|
日韩亚洲国产二区
|
亚洲色偷偷偷综合网
|
久久夜色精品国产亚洲
|
成人免费午夜无码视频
|
新最免费影视大全在线播放
|
国产无遮挡吃胸膜奶免费看
|
亚洲欧洲另类春色校园网站
|
亚洲中文字幕无码永久在线
|
亚欧免费一级毛片
|
久久久久噜噜噜亚洲熟女综合
|
羞羞漫画小舞被黄漫免费
|
亚洲黄色在线播放
|
亚洲成人在线免费观看
|
新最免费影视大全在线播放
|
亚洲一区二区三区亚瑟
|
亚洲精品无码久久久影院相关影片
|
最新亚洲成av人免费看
|
老司机永久免费网站在线观看
|
亚洲一区二区三区高清在线观看
|
国产亚洲一区二区在线观看
|
免费看无码自慰一区二区
|
18禁免费无码无遮挡不卡网站
|
色播在线永久免费视频网站
|
一区二区三区AV高清免费波多
|
亚洲午夜无码久久久久小说
|
亚洲欧洲高清有无
|
免费jjzz在在线播放国产
|
无码日韩精品一区二区免费
|
99热这里只有精品免费播放
|
亚洲综合一区二区三区四区五区
|
亚洲国产精品国自产拍电影
|
精品久久香蕉国产线看观看亚洲
|
中国亚洲女人69内射少妇
|