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ì)
主站蜘蛛池模板:
亚洲第一页在线观看
|
中文日韩亚洲欧美制服
|
18禁美女裸体免费网站
|
亚洲最大天堂无码精品区
|
亚洲欧洲日产国码高潮αv
|
日韩视频在线观看免费
|
99久久国产亚洲综合精品
|
久久精品国产亚洲Aⅴ香蕉
|
国产91免费视频
|
羞羞视频在线观看免费
|
911精品国产亚洲日本美国韩国
|
日韩特黄特色大片免费视频
|
三上悠亚电影全集免费
|
亚洲人成网站18禁止
|
亚洲乱码中文字幕久久孕妇黑人
|
国产免费久久精品99re丫y
|
97超高清在线观看免费视频
|
亚洲精品一二三区
|
无码乱人伦一区二区亚洲一
|
国产精品免费综合一区视频
|
最近中文字幕高清免费中文字幕mv
|
特级无码毛片免费视频
|
亚洲一区二区三区深夜天堂
|
久久久亚洲精品蜜桃臀
|
在线免费观看毛片网站
|
色欲色香天天天综合网站免费
|
久久久久亚洲精品无码网址色欲
|
亚洲精品午夜在线观看
|
激情97综合亚洲色婷婷五
|
国产高清视频在线免费观看
|
免费福利视频导航
|
免费黄网站在线观看
|
美女巨胸喷奶水视频www免费
|
欧洲亚洲综合一区二区三区
|
亚洲一区二区三区无码国产
|
亚洲视屏在线观看
|
亚洲av永久无码精品秋霞电影影院
|
在线观看亚洲av每日更新
|
免费黄色小视频网站
|
国产成人精品免费午夜app
|
久久久国产精品无码免费专区
|