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