一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

對locale和theme的支持

 江江385 2013-05-22
Locale 
Spring MVC缺省使用AcceptHeaderLocaleResolver來根據(jù)request header中的 Accept-Language 來確定訪客的local。對于前端jsp頁面上,spring提供了標(biāo)簽<spring:message>來提供從resource文件中獲取的文字的動態(tài)加載功能。 
例如 
修改servlet context xml文件中的messageSource部分,增加對多國語言message的code resource的引入。 
Xml代碼  收藏代碼
  1. <bean id="messageSource"  
  2.     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"  
  3.     p:fallbackToSystemLocale="true" p:useCodeAsDefaultMessage="false"  
  4.     p:defaultEncoding="UTF-8">  
  5.     <description>Base message source to handle internationalization  
  6.     </description>  
  7.     <property name="basenames">  
  8.         <list>  
  9.             <!-- main resources -->  
  10.             <value>classpath:valid/validation</value>  
  11.             [color=red]<value>classpath:local/message</value>[/color]  
  12.         </list>  
  13.     </property>  
  14. </bean>  


在 src/main/resources目錄下增加local目錄,并在其下增加messpage_zh_CN.properties文件,內(nèi)容為 hello=\u6b22\u8fce,并增加message_en.properties文件內(nèi)容為hello=welcome。 

修改hellworld.jsp,增加如下代碼 

Jsp代碼  收藏代碼
  1. <h1>[color=red]<spring:message code='hello'/>[/color]</h1>  


此時訪問http://localhost:8080/mvc,根據(jù)你的客戶端的不同,將分別顯示中文和英文的歡迎語。 

除缺省的AcceptHeaderLocaleResolver外,spring mvc還提供了CookieLocaleResolver和SessionLocaleResolver兩個localResolver來提供在運行時由客戶端強行指定local的功能。 
分別使用cookie和session中存儲的locale值來指定當(dāng)前系統(tǒng)所使用的locale. 

以SessionLocaleResolver為例,在servlet context xml配置文件中增加如下配置 
Xml代碼  收藏代碼
  1. <bean id="localeResolver"  
  2.     class="org.springframework.web.servlet.i18n.SessionLocaleResolver">  
  3. </bean>     


新增一個controller,來提供更換locale功能。 
Java代碼  收藏代碼
  1. @Controller  
  2. public class LocalChange {  
  3.   
  4.     @Autowired  
  5.     private LocaleResolver localeResolver;  
  6.       
  7.     @RequestMapping("/changeLocale")  
  8.     public String changeLocal(String locale,  
  9.             HttpServletRequest request,  
  10.             HttpServletResponse response){  
  11.         Locale l = new Locale(locale);  
  12.         localeResolver.setLocale(request, response, l);  
  13.         return "redirect:helloworld";  
  14.     }   
  15. }  


可分別訪問http://localhost:8080/springmvc/changeLocale?locale=en 
http://localhost:8080/springmvc/changeLocale?locale=zh_CN 
來查看更換語言后的結(jié)果。 

除以以上方式來變更樣式外,spring mvc還提供了一個 LocaleChangeInterceptor攔截器來在request時根據(jù)request 參數(shù)中的locale參數(shù)的內(nèi)容來實時變更Locale。 
示例代碼如下 
在servlet context xml配置文件中新增攔截器, 
Xml代碼  收藏代碼
  1. <mvc:interceptor>  
  2.   <mvc:mapping path="/*" />  
  3.   <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  
  4. </mvc:interceptor>  


此時訪問 http://localhost:8080/springmvc/helloworld?locale=en ,可以查看動態(tài)更換locale后的效果。 



Theme 
Spring MVC中通過ThemeSource接口來提供對動態(tài)更換樣式的支持,并提供了ResourceBundleThemeSource這個具體實現(xiàn)類來提供通過properties配置文件對theme中的樣式的配置 
例如配置文件中 內(nèi)容為 helloworld=theme/default/css/helloworld.css 
而jsp文件中使用 
<link rel="stylesheet" type="text/css" 
href="<spring:theme code='helloworld'/>" /> 
來引用對helloworld這個樣式文件的引入。由此來實現(xiàn)樣式文件的動態(tài)引用,從而使spring mvc中可以實現(xiàn)換膚功能。 
如果說ThemeSource接口是提供了如何去取當(dāng)前的theme的code與實際內(nèi)容的mapping關(guān)系,那么spring mvc提供的另外一個interface ThemeResolver則是提供了如何去設(shè)置當(dāng)前使用的theme的手段。 
  Spring MVC提供了三個ThemeReslover的實現(xiàn)類,分別是 
FixedThemeResolver:固定格式的theme,不能在系統(tǒng)運行時動態(tài)更改theme. 
SessionThemeResolver:theme name存放在session中key值為 org.springframework.web.servlet.theme.SessionThemeResolver.THEME 的session attribute中??稍谶\行中通過更改session中的相應(yīng)的key值來動態(tài)調(diào)整theme的值。 
CookieThemeResolver:theme name存放在cookie中key值為 org.springframework.web.servlet.theme.CookieThemeResolver.THEME 中??稍谶\行中通過更改cookie中的相應(yīng)的key值來動態(tài)調(diào)整theme的值。 
以上Themesource和ThemeResolver在servlet context xml中的配置示例如下 

Xml代碼  收藏代碼
  1. <bean  
  2.     class="org.springframework.ui.context.support.ResourceBundleThemeSource"  
  3.     id="themeSource">  
  4.     <property name="basenamePrefix" value="theme."></property>  
  5. </bean>  
  6.   
  7.     <bean id="themeResolver"  
  8.     class="org.springframework.web.servlet.theme.SessionThemeResolver">  
  9.     <property name="defaultThemeName" value="grey" />  
  10. </bean>  

從以上配置可以看出,我們使用了一個sessionThemeReslover(bean name 必須為themeReslover,因為這個值是hardcode在DispatcherServlet中的),缺省的themeName為grey。 
而ThemeSource中我們的配置的basenamePrefix為”theme.”,這里表示spring mvc將從classes/theme/目錄下對應(yīng)的themename.properties中讀取配置,例如我們這里配置的是grey,則將從classes/theme/grey.properties中讀取theme code的配置。 
下面我們將新建3個theme,分別為default,red和blue,存放目錄如下。 
 

并修改helloworld.jsp,按前面所介紹的,增加對換膚功能的支持。 

Jsp代碼  收藏代碼
  1. <link rel="stylesheet" type="text/css"  
  2.     href="<spring:theme code='helloworld'/>" />  
  3. </head>  
  4. <body>  
  5.     <h1>Hello World!</h1>  
  6.     [color=red]<div id="divTheme"></div>[/color]  

這里新增一個div來展示換膚前后的效果 

新增一個controller,來提供換膚功能。 

Java代碼  收藏代碼
  1. @Controller  
  2. public class ThemeChange {  
  3.     private final Log logger = LogFactory.getLog(getClass());  
  4.       
  5.     @Autowired  
  6.     private ThemeResolver themeResolver;  
  7.   
  8.     @RequestMapping("/changeTheme")  
  9.     public void changeTheme(HttpServletRequest request,  
  10.             HttpServletResponse response, String themeName) {  
  11.         logger.info("current theme is " + themeResolver.resolveThemeName(request));  
  12.         themeResolver.setThemeName(request, response, themeName);  
  13.         logger.info("current theme change to " + themeResolver.resolveThemeName(request));  
  14.     }  
  15. }  


可訪問 http://localhost:8080/springmvc/ 看到一個缺省的灰色的div層, 
訪問 localhost:8080/springmvc/changeTheme?themeName=red 后,刷新頁面,div的樣式將發(fā)生變化 

除以以上方式來變更樣式外,spring mvc還提供了一個 ThemeChangeInterceptor 攔截器來在request時根據(jù)request 參數(shù)中的theme的內(nèi)容來動態(tài)變更樣式。 
實例代碼如下 
在servlet context xml配置文件中新增攔截器, 
Xml代碼  收藏代碼
  1. <mvc:interceptor>  
  2.   <mvc:mapping path="/*" />  
  3.   <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" />  
  4. </mvc:interceptor>  


此時訪問 http://localhost:8080/springmvc/?theme=blue ,可以查看動態(tài)換膚后的效果。 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产激情国产精品久久源| 欧美一区二区三区喷汁尤物| 欧美日韩亚洲国产精品| 亚洲一区二区三区三州| 夫妻性生活一级黄色录像| 99久久免费中文字幕| 亚洲黄香蕉视频免费看| 欧美韩国日本精品在线| 国产午夜精品久久福利| 国产一级性生活录像片| 日本理论片午夜在线观看| 久热在线视频这里只有精品| 插进她的身体里在线观看骚| 亚洲av日韩一区二区三区四区| 日韩精品一区二区三区四区| 欧美精品中文字幕亚洲| 人妻少妇av中文字幕乱码高清| 日本在线视频播放91| 欧美不卡一区二区在线视频| 老司机精品福利视频在线播放| 熟女乱一区二区三区丝袜| 久久精品国产熟女精品| 制服丝袜美腿美女一区二区| 欧美区一区二在线播放| 欧美午夜国产在线观看| 色婷婷国产熟妇人妻露脸| 69老司机精品视频在线观看| 99久久国产精品免费| 国产传媒中文字幕东京热| 有坂深雪中文字幕亚洲中文| 激情视频在线视频在线视频| 丰满熟女少妇一区二区三区| 国产午夜福利一区二区| 亚洲综合日韩精品欧美综合区| 人妻少妇系列中文字幕| 国产一区二区三中文字幕 | 欧美日韩国产午夜福利| 五月婷婷六月丁香狠狠| 日韩欧美好看的剧情片免费| 国产精品白丝一区二区| 国产日本欧美韩国在线|