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
主站蜘蛛池模板:
久久亚洲国产成人精品性色
|
中文字幕精品亚洲无线码二区
|
亚洲精品视频免费看
|
中国内地毛片免费高清
|
亚洲人AV永久一区二区三区久久
|
久久亚洲国产欧洲精品一
|
特黄特色大片免费
|
亚洲精品无码久久久久AV麻豆
|
美女露100%胸无遮挡免费观看
|
亚洲av日韩av欧v在线天堂
|
亚洲阿v天堂在线2017免费
|
久久精品亚洲福利
|
国内精品免费视频精选在线观看
|
亚洲资源在线视频
|
毛片A级毛片免费播放
|
亚洲无码视频在线
|
精选影视免费在线
|
亚洲AV无码一区东京热久久
|
国产福利在线观看永久免费
|
2022中文字字幕久亚洲
|
毛片在线全部免费观看
|
亚洲视频一区在线观看
|
免费观看男人免费桶女人视频
|
男男gay做爽爽的视频免费
|
亚洲午夜久久久久妓女影院
|
久久成人免费大片
|
亚洲视频在线观看2018
|
国产麻豆剧传媒精品国产免费
|
国产亚洲午夜精品
|
亚洲国产精品久久久久婷婷老年
|
亚洲w码欧洲s码免费
|
亚洲a无码综合a国产av中文
|
亚洲伊人成无码综合网
|
亚洲国产av玩弄放荡人妇
|
国产国拍亚洲精品福利
|
午夜亚洲av永久无码精品
|
a级成人毛片免费图片
|
亚洲jjzzjjzz在线观看
|
亚洲精品国自产拍在线观看
|
久久99精品国产免费观看
|
亚洲av无码专区在线观看亚
|