SpringMvc国际化 根据不同请求调用不同的资源文件
2014-04-18 12:34
513 查看
参考自:/article/4905492.html
项目中有两个资源文件如下:
messages_en_US.properties内容如下:
test_en_US.properties内容如下:
现要实现一功能,就是模块1要取test_en_US.properties中的内容,其他模块取messages_en_US.properties中的内容
实现方法:在模块1的controller中的request作用域放一个标识:如
扩展一个类继承ReloadableResourceBundleMessageSource或ResourceBundleMessageSource
代码如下:
或
在springmvc-servlet中定义如下:
controller如下:
两个jsp文件如下:
login.jsp
index.jsp
则调用login.json时候
当前页面login.jsp:hello test
index
点击index时候会显示:
当前页面index.jsp:hello
login
这样就实现了根据不同的请求调用不同的资源文件的目的。
项目中有两个资源文件如下:
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]; @Override protected 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;
@Controller
public class LoginController {
@Autowired
MongoDao 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
这样就实现了根据不同的请求调用不同的资源文件的目的。
相关文章推荐
- java实现FTP上传下载
- springframework中使用ReloadableResourceBundleMessageSource加载properties文件的问题
- Ganymed SSH-2 for Java系列2之连接远程服务器
- Ganymed SSH-2 for Java系列1之 ganymed-ssh2介绍
- JAVA项目工程导入.jar包
- JAVA环境变量
- eclipse使用replace命令替换整个project/workspace的某个字符串
- java环境变量配置
- java观察者模式
- Android Eclipse:Debug Certifica…
- java中上下文(context)的学习总结
- java高并发访问及队列控制解决方案
- Java-列出所有系统属性
- LeetCode – Median of Two Sorted Arrays Java
- Java-一个数组中的元素复制到另一个数组
- Ubuntu 12.04下配置JDK7
- JavaSript之prototype属性
- Java 中的初始化顺序的影响和“overloading”与“overwrite”
- spring3.x读取文件报错
- java判断获取到的中文字符串是否乱码