SpringMvc国际化 根据不同请求调用不同的资源文件
来源:互联网 发布:苹果cms解析教程 编辑:程序博客网 时间:2024/05/17 22:38
参考自:http://www.cnblogs.com/huang0925/archive/2013/05/29/3106022.html
项目中有两个资源文件如下:
messages_en_US.properties内容如下:
label.message.name=hello
test_en_US.properties内容如下:
label.message.name=hello test
现要实现一功能,就是模块1要取test_en_US.properties中的内容,其他模块取messages_en_US.properties中的内容
实现方法:在模块1的controller中的request作用域放一个标识:如
@RequestMapping(value = "/login.json", method = RequestMethod.GET)public String login(HttpServletRequest request) {request.setAttribute("testrequest", "test");return "login";}
扩展一个类继承ReloadableResourceBundleMessageSource或ResourceBundleMessageSource
代码如下:
import java.util.ArrayList;import java.util.List;import java.util.Locale;import java.util.Properties;import org.springframework.context.support.ReloadableResourceBundleMessageSource;import org.springframework.util.Assert;import org.springframework.util.StringUtils;import org.springframework.web.context.request.RequestAttributes;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;public class ReloadMessageResourceExtesion extends ReloadableResourceBundleMessageSource { private static List<Locale> supporedLocales = new ArrayList<Locale>(); private String[] basefilenames = new String[0]; public void setBasenames(String[] basenames) { if (basenames != null) { this.basefilenames = new String[basenames.length]; for (int i = 0; i < basenames.length; i++) { String basename = basenames[i]; Assert.hasText(basename, "Basename must not be empty"); this.basefilenames[i] = basename.trim(); } } else { this.basefilenames = new String[0]; } super.setBasenames(basenames); } public static List<Locale> getSupporedLocales() { return supporedLocales; } public Properties getAllProperties(String filename){ return super.getProperties(filename).getProperties(); } public Properties getAllProperties(Locale locale){ return super.getMergedProperties(locale).getProperties(); } public String getMessage(String code, Locale locale){ return super.resolveCodeWithoutArguments(code,locale); } @Override protected String resolveCodeWithoutArguments(String code, Locale locale) { ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); final String testrequest = (String) attr.getAttribute("testrequest", RequestAttributes.SCOPE_REQUEST); for(String basename : basefilenames) { if (StringUtils.endsWithIgnoreCase(basename,testrequest)) { List<String> filenames = calculateAllFilenames(basename, locale);for (String filename : filenames) {PropertiesHolder propHolder = getProperties(filename);String result = propHolder.getProperty(code);if (result != null) {return result;}} } } return super.resolveCodeWithoutArguments(code, locale); }}
或
import java.util.Locale;import java.util.MissingResourceException;import java.util.ResourceBundle;import org.springframework.context.support.ResourceBundleMessageSource;import org.springframework.util.Assert;import org.springframework.util.StringUtils;import org.springframework.web.context.request.RequestAttributes;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;public class MessageResourceExtesion extends ResourceBundleMessageSource {private String[] basenames = new String[0];@Overrideprotected String resolveCodeWithoutArguments(String code, Locale locale) {ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();final String testrequest = (String) attr.getAttribute("testrequest", RequestAttributes.SCOPE_REQUEST);logger.debug(testrequest);for (String basename : basenames) {if (StringUtils.endsWithIgnoreCase(basename, testrequest)) {ResourceBundle bundle = getResourceBundle(basename, locale);if (bundle != null) {return getStringOrNull(bundle, code);}}}return super.resolveCodeWithoutArguments(code, locale);}public void setBasenames(String... basenames) {if (basenames != null) {this.basenames = new String[basenames.length];for (int i = 0; i < basenames.length; i++) {String basename = basenames[i];Assert.hasText(basename, "Basename must not be empty");this.basenames[i] = basename.trim();}} else {this.basenames = new String[0];}super.setBasenames(basenames);}private String getStringOrNull(ResourceBundle bundle, String key) {try {return bundle.getString(key);} catch (MissingResourceException ex) {return null;}}}
在springmvc-servlet中定义如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.mongo.web"></context:component-scan> <!-- <bean id="messageSource" class="com.mongo.util.ReloadMessageResourceExtesion"> <property name="basenames"> <list> <value>classpath:i18n/messages</value> <value>classpath:i18n/test</value> </list> </property> <property name="defaultEncoding" value="UTF-8"/> </bean> --> <bean id="messageSource" class="com.mongo.util.MessageResourceExtesion"> <property name="basenames"> <list> <value>i18n.messages</value> <value>i18n.test</value> </list> </property> </bean> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang" /> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" > <property name="defaultLocale" value="en_US" /> </bean> <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <ref bean="localeChangeInterceptor" /></property> </bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean></beans>web.xml如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:*.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- spring MVC配置 --><servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list></web-app>
controller如下:
import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.mongo.dao.MongoDao;@Controllerpublic class LoginController {@AutowiredMongoDao mongodao;@RequestMapping(value = "/login.json", method = RequestMethod.GET)public String login(HttpServletRequest request) {request.setAttribute("testrequest", "test");return "login";}@RequestMapping(value = "/index.json", method = RequestMethod.GET)public String index(){return "index";}}
两个jsp文件如下:
login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><% response.setHeader("Pragma","no-cache"); response.setHeader("Cache-Control","no-cache, no-store, must-revalidate, private");%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%@taglib uri="http://www.springframework.org/tags" prefix="spring"%><%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><c:set var="ctx" value="<%=request.getContextPath() %>"></c:set><c:set var="scheme" value="<%=request.getScheme() %>"></c:set><html><body> 当前页面login.jsp:<spring:message code="label.message.name" /><br/> <a href="index.json">index</a></body></html>
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><% response.setHeader("Pragma","no-cache"); response.setHeader("Cache-Control","no-cache, no-store, must-revalidate, private");%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%@taglib uri="http://www.springframework.org/tags" prefix="spring"%><%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><c:set var="ctx" value="<%=request.getContextPath() %>"></c:set><c:set var="scheme" value="<%=request.getScheme() %>"></c:set><html><body> 当前页面index.jsp:<spring:message code="label.message.name" /><br/> <a href="login.json">login</a></body></html>
则调用login.json时候
当前页面login.jsp:hello test
index
点击index时候会显示:
当前页面index.jsp:hello
login
这样就实现了根据不同的请求调用不同的资源文件的目的。
0 0
- SpringMvc国际化 根据不同请求调用不同的资源文件
- 根据分辨率不同,调用不同的CSS文件
- 根据分辨率不同调用不同的css文件
- 【转】根据分辨率不同调用不同的css文件
- 根据分辨率不同调用不同的css文件
- 根据分辨率不同,调用不同的css文件
- 根据分辨率不同调用不同的css文件
- SpringMVC 实现根据不同的请求类型(请求方法method=GetOrPost)分别响应
- SpringMVC 实现根据不同的请求类型(请求方法method=GetOrPost)分别响应
- js 根据屏幕大小调用不同的css文件
- js 根据屏幕大小调用不同的css文件
- shiro+SpringMVC中根据不同身份进入不同的页面
- 用js实现根据不同的分辨率和浏览器调用不同的css文件
- 用js实现根据不同的分辨率和浏览器调用不同的css文件
- 用js实现根据不同的分辨率和浏览器调用不同的css文件
- 根据不同的浏览器,导入不同的资源
- Springmvc同一请求下根据不同的逻辑返回页面或者json
- 根据不同的数据库调用不同的DBHelper(反射机制)
- 半瓶桃米酒
- 学英语,“爱尚”让我找到了信心
- Cocos2d-x2.2使用Admob插屏广告教程(一):iOS篇
- 什么是memcached and 使用memcached实现session远程分布式存储
- PAT - 1004. 成绩排名 (20)
- SpringMvc国际化 根据不同请求调用不同的资源文件
- 微软面试100题之26题:左旋转字符串
- iOS通过ASIHTTPRequest提交JSON数据
- MySQL配置文件my.cnf详解附mysql性能优化方法
- 性能优化之Android布局优化
- 第六周作业1——利用哈夫曼编码英文字母表
- AWK 简明教程
- VS08 Word Excel
- leetcode难度及面试频率