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的引入。
在 src/main/resources目錄下增加local目錄,并在其下增加messpage_zh_CN.properties文件,內(nèi)容為 hello=\u6b22\u8fce,并增加message_en.properties文件內(nèi)容為hello=welcome。 修改hellworld.jsp,增加如下代碼
此時訪問http://localhost:8080/mvc,根據(jù)你的客戶端的不同,將分別顯示中文和英文的歡迎語。 除缺省的AcceptHeaderLocaleResolver外,spring mvc還提供了CookieLocaleResolver和SessionLocaleResolver兩個localResolver來提供在運行時由客戶端強行指定local的功能。 分別使用cookie和session中存儲的locale值來指定當(dāng)前系統(tǒng)所使用的locale. 以SessionLocaleResolver為例,在servlet context xml配置文件中增加如下配置
新增一個controller,來提供更換locale功能。
可分別訪問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配置文件中新增攔截器,
此時訪問 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中的配置示例如下
從以上配置可以看出,我們使用了一個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,按前面所介紹的,增加對換膚功能的支持。
這里新增一個div來展示換膚前后的效果 新增一個controller,來提供換膚功能。
可訪問 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配置文件中新增攔截器,
此時訪問 http://localhost:8080/springmvc/?theme=blue ,可以查看動態(tài)換膚后的效果。 |
|