nighty
折騰的年華
posts - 37, comments - 143, trackbacks - 0, articles - 0
導(dǎo)航
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
<
2010年11月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(7)
給我留言
查看公開留言
查看私人留言
隨筆分類
Eclipse(7)
Flex(2)
Java(6)
Struts2(2)
SWT/JFace(1)
信息安全(1)
心得(5)
操作系統(tǒng)(3)
數(shù)據(jù)庫(3)
服務(wù)器部署(5)
測試(2)
系統(tǒng)集成(2)
軟件架構(gòu)(2)
隨筆檔案
2013年4月 (2)
2013年3月 (1)
2012年4月 (1)
2011年10月 (1)
2011年8月 (1)
2011年5月 (3)
2011年4月 (1)
2011年3月 (2)
2011年2月 (1)
2011年1月 (1)
2010年11月 (1)
2009年11月 (1)
2009年10月 (1)
2009年8月 (1)
2009年7月 (1)
2008年8月 (2)
2008年7月 (2)
2008年6月 (2)
2008年5月 (4)
2008年4月 (1)
2008年1月 (1)
2007年11月 (1)
2007年10月 (2)
2007年8月 (2)
文章分類
測試
搜索
最新評論
1.?re: 關(guān)于commons dbutils組件的一個小缺陷分析
dbutils中連傳入到的參數(shù)都不區(qū)分大小寫??
--starhe
2.?re: B/S,C/S架構(gòu)混合使用[未登錄]
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--eagle
3.?re: B/S,C/S架構(gòu)混合使用[未登錄]
補(bǔ)充一下:用的語言是java,開發(fā)環(huán)境是eclipse
--eagle
4.?re: B/S,C/S架構(gòu)混合使用
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--Unbotrusive
5.?re: struts2中重定向中文參數(shù)亂碼梳理[未登錄]
有用啊
--tony
閱讀排行榜
1.?ubuntu安裝Java開發(fā)環(huán)境(38192)
2.?Eclipse3.3安裝中文語言包(13944)
3.?B/S,C/S架構(gòu)混合使用(13765)
4.?Http狀態(tài)碼思維導(dǎo)圖(13765)
5.?添加完整的Eclipse RCP幫助系統(tǒng)(8938)
評論排行榜
1.?B/S,C/S架構(gòu)混合使用(25)
2.?無奈只能放棄iBatis(24)
3.?Eclipse3.3安裝中文語言包(13)
4.?httpclient3.1使用小結(jié)(8)
5.?JDBC連接DB2的一些總結(jié)(8)
Struts2+FreeMarker中利用plainText處理Ajax的一個技巧
Posted on 2010-11-10 15:43
寒武紀(jì)
閱讀(3092)
評論(3)
編輯
收藏
所屬分類:
Struts2
項(xiàng)目中使用了FreeMarker做為視圖技術(shù),相對來說因?yàn)閒reemarker在視圖上有一些邏輯處理功能,某些地方就顯得比較方便,特別是macro的使用,當(dāng)然也不是說JSP就沒有這個功能,只是以前用JSP寫起來沒有這么順手。
那么遵從前臺開發(fā)的一些基本原則,F(xiàn)TL(指freemarker模板文件)、CSS、JS都可以分得比較清晰。按照以前的技巧,在做Ajax請求的時候,都是前臺用JS框架(例如jquery)發(fā)送請求,Server端處理后用JSON結(jié)果返回。用struts2,到現(xiàn)在已經(jīng)是2.2.1版本了,都覺得很方便!一般都是加上struts-json的Plugin來響應(yīng)JSON的結(jié)果。
老是覺得麻煩的地方在于:JSON是純數(shù)據(jù)的組織形式,在Server處理完后,要響應(yīng)頁面,得先組織成json,到了頁面,響應(yīng)得到了json,又得取出來,動態(tài)添加到DOM中的某個地方;數(shù)據(jù)添加的同時,還有可能得使用js對樣式進(jìn)行一些效果渲染。總體來說,這就使得前臺的js有點(diǎn)羅嗦,比如常見的就要append(html),這些html是用js字符串生成的,看著感覺很不舒服。
發(fā)現(xiàn)struts2有一個特殊的類型叫:plainText,可以把type類型定義為它,這樣頁面響應(yīng)獲取得到的就是源代碼樣式的內(nèi)容。這個功能大概就是為了給那些需要返回源代碼的頁面使用的。那么換個思路就是說,這返回的type就可以針對上面提出問題中,解決了已經(jīng)組織好數(shù)據(jù)和樣式的內(nèi)容。返回的內(nèi)容不僅包含了數(shù)據(jù),也包含了樣式,和你直接返回一個HTML是一樣,不過一般我們都需要動態(tài)生成html。把結(jié)果直接嵌入在HTML中,就可以顯示出來,不再需要用js進(jìn)行組織。利用這個特點(diǎn),做了個測試。發(fā)現(xiàn)行得通!
1. 首先,配置struts.xml文件,添加如下代碼:
<
package
name
="pt"
extends
="struts-default"
>
<
action
name
="test"
class
="test.TestAction"
>
<
result
type
="plainText"
>
<
param
name
="location"
>
/test.ftl
</
param
>
<
param
name
="charSet"
>
GBK
</
param
>
</
result
>
</
action
>
</
package
>
注意到了2.2.1版本,原來的plaintext寫法不知道從哪個版本開始已經(jīng)不支持了,要有大寫T開頭,
plainText
,一個小細(xì)節(jié),免得啟動時老是報錯。
2. Action的代碼
public
class
TestAction
extends
ActionSupport
{
private
String msg;
public
String getMsg()
{
return
msg;
}
public
void
setMsg(String msg)
{
this
.msg
=
msg;
}
@Override
public
String execute()
throws
Exception
{
setMsg(
"
我是Test
"
);
Configuration cfg
=
new
Configuration();
cfg.setServletContextForTemplateLoading(ServletContextUtil.getContext(),
"
/template
"
);
Template t
=
cfg.getTemplate(
"
test.ftl
"
);
ServletContextUtil.getResponse().setContentType(
"
text/html;charaset=
"
+
t.getEncoding());
Writer out
=
ServletContextUtil.getResponse().getWriter();
Map root
=
new
HashMap();
root.put(
"
msg
"
, getMsg());
t.process(root, out);
return
null
;
}
}
這是臨時隨便寫的,變量大概在正式項(xiàng)目中不會這樣定義,這只是一個測試而已。這里要注意,不要返回SUCCES,因?yàn)槟菢臃祷氐氖窃次募瑳]有填充入數(shù)據(jù)的ftl文件,到了前臺也沒用。所以這里有點(diǎn)小麻煩,必須用Freemarker的API,把固定的模板,用數(shù)據(jù)填充后,用out寫出,最后return null即可!
3. 下面是ftl文件
<
div
style
="color:red;"
>
This is a plainText: ${msg}
</
div
>
這樣前臺接收到的,就是這個經(jīng)過填充和渲染后的ftl頁面,和正常的html一樣。你可以把這個頁面做得足夠復(fù)雜。在需要嵌入的頁面上,用jquery之類的調(diào)用后放入DOM中即可以。
比如下面這樣的,把獲取得到的內(nèi)容,填充入id為myDiv的DOM節(jié)點(diǎn)中。
$(
"
#myDiv
"
).load(
"
test.action
"
);
話說回來,也不是所有地方都建議這樣,有些地方,比如ajax填充一個下拉列表,或是僅僅列出一些簡單的數(shù)據(jù),就不建議這么大費(fèi)周章。直接用JSON處理更來得簡單。這個技巧適用的場景是那些沒有iframe架構(gòu)的頁面,又需要ajax響應(yīng)局部的具有一些組織形式的內(nèi)容。如果你頁面都是include方式來進(jìn)行劃分,又想可以Aajx引入一個比較復(fù)雜的頁面,也許這種思路可以省掉很多麻煩。具體的應(yīng)用還需要進(jìn)一步的實(shí)踐!
剛進(jìn)場的時候戲就落幕
Feedback
#
re: Struts2+FreeMarker中利用plainText處理Ajax的一個技巧
回復(fù)
更多評論
2010-11-10 23:55 by
wenlin
struts2 中可以用 return Action.NONE 來代替 return null
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
struts2中重定向中文參數(shù)亂碼梳理
Struts2+FreeMarker中利用plainText處理Ajax的一個技巧
Powered by:
BlogJava
Copyright © 寒武紀(jì)
主站蜘蛛池模板:
亚洲国产精品专区
|
成人免费无毒在线观看网站
|
日木av无码专区亚洲av毛片
|
免费观看四虎精品国产永久
|
中国xxxxx高清免费看视频
|
三年在线观看免费观看完整版中文
|
久久精品国产亚洲AV不卡
|
免费观看的a级毛片的网站
|
人妻丰满熟妇无码区免费
|
国产无遮挡色视频免费观看性色
|
亚洲精品无码久久久久秋霞
|
亚洲日本在线电影
|
久久亚洲精品国产精品婷婷
|
亚洲av永久无码一区二区三区
|
亚洲中文字幕无码久久2020
|
亚洲精品无码中文久久字幕
|
国产精品久久亚洲一区二区
|
亚洲国产精品13p
|
亚洲精品无码永久在线观看你懂的
|
国产∨亚洲V天堂无码久久久
|
老色鬼久久亚洲AV综合
|
亚洲一级黄色大片
|
免费在线观看一区
|
东北美女野外bbwbbw免费
|
亚洲精品无码久久久久牙蜜区
|
亚洲性线免费观看视频成熟
|
国产AV旡码专区亚洲AV苍井空
|
亚洲va中文字幕无码久久
|
亚洲沟沟美女亚洲沟沟
|
国产成人无码免费看片软件
|
2021免费日韩视频网
|
亚洲日韩图片专区第1页
|
亚洲精品偷拍视频免费观看
|
好吊妞998视频免费观看在线
|
亚洲国产成人久久精品app
|
亚洲欧洲日韩不卡
|
一级做a爰黑人又硬又粗免费看51社区国产精品视
|
114级毛片免费观看
|
亚洲高清无码专区视频
|
亚洲粉嫩美白在线
|
黄在线观看www免费看
|