菠蘿大象
用心思考,用心寫作
首頁
新隨筆
聯(lián)系
管理
隨筆-67 評論-522 文章-0 trackbacks-0
基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn)
通過之前的
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解
系列文章,我們已經(jīng)成功的整合到了一起,這次大象將在此基礎(chǔ)上對框架中的
FreeMarker
模板做一個(gè)擴(kuò)展,詳細(xì)說明如何實(shí)現(xiàn)自定義指令(標(biāo)簽)功能。
我們在開發(fā)的時(shí)候,往往對一些數(shù)據(jù)字典形式的數(shù)據(jù),想將它封裝成通用的模塊以便于使用,如果使用
JSP
做展示層,可以創(chuàng)建自定義標(biāo)簽來實(shí)現(xiàn),現(xiàn)在換成
FreeMarker
視圖,我們一樣可以達(dá)到想要的目的。
實(shí)現(xiàn)
FreeMarker
指令其實(shí)很簡單,只要實(shí)現(xiàn)
TemplateDirectiveModel
接口,覆蓋里面的方法即可。
public
void
execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
throws
TemplateException, IOException
大象以
select
下拉框及顯示數(shù)據(jù)字典文本兩個(gè)自定義指令為例來進(jìn)行說明。
在
ssm3
工程中按下圖創(chuàng)建
freemarker package
本例只為了說明如何實(shí)現(xiàn),簡便起見,所以用了
DictContext
這個(gè)模擬數(shù)據(jù)字典類。
我模擬了性別和學(xué)歷的數(shù)據(jù),實(shí)際開發(fā)中,這些都是從數(shù)據(jù)庫取得,原理都差不多,這里主要是為了演示。
xb01
、
xl01
這個(gè)標(biāo)識大家可以隨意定義只要保證唯一性就可以了,該類中還有兩個(gè)取數(shù)據(jù)的方法,請直接看源碼,這里就不再說明了。
接下來我們就可以來創(chuàng)建
DictSelectDirective
這個(gè)類。
上面這些參數(shù),都是從模板頁的自定義指令中獲取的,根據(jù)我們想創(chuàng)建的這個(gè)
select FreeMarker
指令,可以定義任何我們想要的東西。因?yàn)樽罱K生成的就是一段
select html
代碼。
通過
params.get()
獲得的參數(shù)有類型要求,不同的值需要對其轉(zhuǎn)型到相應(yīng)類型。所以你不能將
select
的
name
類型轉(zhuǎn)為
SimpleNumber
。另外還有一點(diǎn)要注意,
FreeMarker
對值的類型很敏感,什么意思呢?比如
params.get(
"value"
);
這是獲得數(shù)據(jù)庫中對應(yīng)的字典值,對于這個(gè)值請一定要統(tǒng)一定義數(shù)據(jù)類型,比如都為整型或是字符串型,否則就會轉(zhuǎn)換失敗。所以大象在這里為了演示用到了
TemplateModel
接口,它是所有模板數(shù)據(jù)類型的超類。雖然這樣做可以避免類型轉(zhuǎn)換的錯(cuò)誤,但同時(shí)會增加類型解析的代碼量,所以完全沒有必要,因?yàn)橹灰捌谝?guī)劃設(shè)計(jì)好,這類問題完全可以避免。
DictSelectDirective
里面其它代碼就是拼裝
select
,這個(gè)請直接看源碼,另外代碼中用到了一個(gè)第三方開源工具
commons-lang
,所以
pom
中需要加入這個(gè)依賴。
注意紅色框部分的代碼,我在之前就說過,如果類型不確定,使用
TemplateModel
,就需要做類型解析的分析。而
DictContext.
getInstance
().getDict(type.getAsString())
是獲得對應(yīng)類型的數(shù)據(jù)字典,
for
循環(huán)將數(shù)據(jù)拼裝到
option
中,如果是編輯表單,
value
有值,則會將對應(yīng)的
option
選中。
DictDisplayDirective
實(shí)現(xiàn)更簡單,方法
DictSelectDirective
一樣,這里就不再贅述。
想讓
FreeMarker
的指令發(fā)揮作用,我們還有一些工作要做。下面這些源碼中都有,可以直接查看代碼。
1
、
在
servlet-context.xml
里面加入紅色方框中的內(nèi)容
2
、在數(shù)據(jù)庫的
role
表中,增加
sex
和
edu
兩個(gè)字段
3
、在
Role.java
中添加
sex
與
edu
屬性及
getter
,
setter
方法
4
、修改
RoleMapper.xml
中
insert
和
update
語句,增加
sex
和
edu
的保存與更新。
<
sql
id
=
"base_column"
>
也要增加
sex
和
edu
字段。
5
、修改
role_edit.html
,增加性別與學(xué)歷的
FreeMarker
指令。
6
、修改
role_list.html
,增加性別與學(xué)歷顯示。
7
、
role_view.html
也作相應(yīng)修改,略。
整個(gè)
FreeMarker
自定義指令(標(biāo)簽)的實(shí)現(xiàn)就這些,非常簡單,大家還可以自行擴(kuò)展,比如根據(jù)自身的業(yè)務(wù)需要,創(chuàng)建
checkbox
、
radio
等指令,或者是多個(gè)
value
值的文本顯示,這些原理都是一樣的。
源碼下載:
ssm3_freemarker
本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。
http://www.tkk7.com/
bolo
posted on 2013-09-29 11:46
菠蘿大象
閱讀(7585)
評論(6)
編輯
收藏
所屬分類:
Spring3
評論:
#
re: 基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn) 2014-04-02 14:56 |
王凱文
講的好阿 ,能把自己懂得東西分享給他人,才是大神.
回復(fù)
更多評論
#
re: 基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn) 2014-08-28 15:35 |
癸亥
如果要從數(shù)據(jù)庫讀取數(shù)據(jù)字典要怎么實(shí)現(xiàn)呢?
從后臺類不通過controller怎么使用MyBatisDao讀取數(shù)據(jù)庫?。?nbsp;
回復(fù)
更多評論
#
re: 基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn) 2014-09-03 13:42 |
菠蘿大象
@癸亥
數(shù)據(jù)字典放在緩存中,難道你想每次用的時(shí)候都去數(shù)據(jù)庫取嗎?
回復(fù)
更多評論
#
re: 基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn) 2014-09-05 16:04 |
癸亥
@菠蘿大象
第一次初始化怎么讀數(shù)據(jù)啊。我就是想問第一次怎么連接數(shù)據(jù)庫。我在Java類里調(diào)用不了service啊。DAO也實(shí)例化不了。這些是被springMVC管理了。
回復(fù)
更多評論
#
re: 基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn) 2014-09-15 09:31 |
菠蘿大象
@癸亥
service已經(jīng)由spring的IoC容器來管理了,你可以通過WebApplicationContext來拿到這些bean,至于你說的第一次怎么連接,這更不是問題了,有很多方法,比如通過擴(kuò)展servlet的ServletContextListener或者擴(kuò)展spring的SmartLifecycle都可以達(dá)到你想要的效果
回復(fù)
更多評論
#
re: 基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn)
2014-09-18 09:42 |
癸亥
@菠蘿大象
我用一個(gè)servlet在工程啟動時(shí)使用WebApplicationContext存了一個(gè)BeanFactory。現(xiàn)在已經(jīng)能讀取了。
缺點(diǎn)是不在spring的事務(wù)管理下,不過反正是個(gè)讀,也沒必要用到事務(wù)了。
謝謝你的解答。
回復(fù)
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
Quartz Spring與Spring Task總結(jié)
基于SSM3框架使用FreeMarker模板生成靜態(tài)頁的實(shí)現(xiàn)
基于Spring MVC框架JSR-303的自定義注解Validator驗(yàn)證實(shí)現(xiàn)
基于Spring MVC框架的異常隱藏實(shí)現(xiàn)方法
解決Spring MVC框架靜態(tài)資源文件顯示問題
基于SSM3框架FreeMarker自定義指令(標(biāo)簽)實(shí)現(xiàn)
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(五)
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(四)
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三)
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(二)
<
2013年9月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
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
隨筆分類
(67)
Concurrency(3)
Database(4)
dom4j&jdom(3)
Eclipse(3)
Flex(4)
Hibernate(2)
Java(11)
jBPM(1)
jQuery(5)
Linux(1)
mybatis-generator(3)
Spring3(11)
Struts2(9)
隨筆(7)
隨筆檔案
(67)
2015年9月 (1)
2015年8月 (1)
2015年7月 (1)
2015年5月 (1)
2015年4月 (1)
2015年3月 (3)
2015年2月 (1)
2015年1月 (2)
2014年8月 (1)
2014年6月 (2)
2014年5月 (2)
2014年4月 (3)
2014年3月 (1)
2014年2月 (1)
2014年1月 (2)
2013年12月 (3)
2013年11月 (2)
2013年10月 (2)
2013年9月 (2)
2012年5月 (1)
2012年4月 (2)
2011年8月 (1)
2011年6月 (1)
2011年5月 (3)
2010年9月 (1)
2010年8月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (2)
2010年4月 (4)
2010年3月 (2)
2010年2月 (7)
2008年9月 (2)
2008年8月 (6)
搜索
積分與排名
積分 - 780868
排名 - 54
最新隨筆
1.?由Struts2Action代理和googlecode-jsonplugin產(chǎn)生的一個(gè)IllegalArgumentException異常問題
2.?在CentOS系統(tǒng)中同步時(shí)間
3.?全局唯一ID生成器淺析
4.?用Java實(shí)現(xiàn)MJD轉(zhuǎn)UTC
5.?修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(三)
6.?修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(二)
7.?修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
8.?Quartz Spring與Spring Task總結(jié)
9.?常用的MySQL復(fù)雜查詢語句寫法
10.?常用的MySQL語句寫法
11.?淺談Java兩種并發(fā)類型——計(jì)算密集型與IO密集型
12.?使用XStream注解實(shí)現(xiàn)Java對象與XML互相轉(zhuǎn)換的代碼示例
13.?淺談volatile變量的理解
14.?淺談Java共享變量
15.?m2eclipse安裝小貼士
最新評論
1.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--半湖思絮
2.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--菠蘿大象
3.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--donghc
4.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
@donghc
maven不是這樣玩的呀,我的run是打包后用的,你仔細(xì)看了第三篇的內(nèi)容么?在IDE里直接啟動StartUp就行了,這個(gè)類是用來測試的
--菠蘿大象
5.?re: 修改mybatis-generator-1.3.2源碼實(shí)現(xiàn)自定義代碼生成詳解(一)
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--donghc
閱讀排行榜
1.?使用jackson對Java對象與JSON字符串相互轉(zhuǎn)換的一些總結(jié)(59335)
2.?在Eclipse中反編譯Class文件完全詳解(43597)
3.?Quartz Spring與Spring Task總結(jié)(38575)
4.?使用XStream注解實(shí)現(xiàn)Java對象與XML互相轉(zhuǎn)換的代碼示例(33138)
5.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(二)(32454)
評論排行榜
1.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五)(69)
2.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(三)(47)
3.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(一)(35)
4.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(二)(27)
5.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解(三)(26)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 菠蘿大象
主站蜘蛛池模板:
免费人成视频在线
|
亚洲av成人综合网
|
亚洲精品福利网站
|
亚洲午夜久久久精品电影院
|
亚洲国产日韩精品
|
天堂亚洲免费视频
|
久99久精品免费视频热77
|
免费无码精品黄AV电影
|
久久久久亚洲精品无码网址
|
久久国产乱子伦精品免费午夜
|
免费av一区二区三区
|
拨牐拨牐x8免费
|
亚洲熟妇无码AV在线播放
|
亚洲校园春色另类激情
|
一个人免费播放在线视频看片
|
暖暖免费在线中文日本
|
在线中文高清资源免费观看
|
九月丁香婷婷亚洲综合色
|
亚洲avav天堂av在线网毛片
|
一级毛片成人免费看免费不卡
|
国产免费av片在线播放
|
亚洲精品熟女国产
|
精品一区二区三区高清免费观看
|
1000部羞羞禁止免费观看视频
|
亚洲国产精品激情在线观看
|
国产成人精品日本亚洲专区6
|
a级男女仿爱免费视频
|
国产成人免费ā片在线观看
|
亚洲理论片在线中文字幕
|
9i9精品国产免费久久
|
麻豆精品国产免费观看
|
亚洲欧洲日产韩国在线
|
a级黄色毛片免费播放视频
|
国产精品国产免费无码专区不卡
|
亚洲视频在线观看网址
|
日韩精品免费视频
|
国产亚洲一区二区三区在线不卡
|
亚洲视频免费播放
|
久久精品九九亚洲精品天堂
|
视频一区二区三区免费观看
|
成年女人毛片免费播放视频m
|