参考文章:STRUTS 2 国际化并自定义切换语言的问题解决
一,国际化resource文件配置及使用
参考百度
二,国际化切换
1,切换用Link
调用anction时,将当前界面URL作为参数传递,确保语言切换后可以返回当前界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <div> <a href="<%=pageContext.getAttribute("basePath")%>lang.action?local=zh_CN¤tUrl=<%=request.getServletPath()%>">中文</a> <a href="<%=pageContext.getAttribute("basePath")%>lang.action?local=en_US¤tUrl=<%=request.getServletPath()%>">English</a> </div>
2,切换用Action
使用参数,更改Session中的WW_TRANS_I18N_LOCALE信息
package gravehistory.test.struts; import java.util.Locale; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LangAction extends ActionSupport { private String local = ""; private String currentUrl = ""; public String execute() { if (local != null) { String loc[] = local.split("_"); Locale locale = new Locale(loc[0], loc[1]); // Session 值设定。第一句代码很重要,不设定的话,需要点两次切换按钮才可以切换 // 如果URL request参数名为request_locale,可以不设定 ActionContext.getContext().setLocale(locale); ServletActionContext.getRequest().getSession() .setAttribute("WW_TRANS_I18N_LOCALE", locale); } return "success"; } public String getCurrentUrl() { return currentUrl; } public void setCurrentUrl(String currentUrl) { this.currentUrl = currentUrl; } public String getLocal() { return local; } public void setLocal(String local) { this.local = local; } }
Action执行结束后,返回调用页面
<action name="lang" class="gravehistory.test.struts.LangAction"> <result name="success">${currentUrl}</result> </action>
3,切换用Filter
如果想要将当前A.jsp界面选择的的语言环境同时应用于其他界面(B.jsp,C.jsp。。。)时,需要做一下处理。
GHRequestWrapper和I18nFilter的作用是,根据Session中WW_TRANS_I18N_LOCALE重新创建Local,以代替Struts从浏览器获取的Local。
package com.daipeng.gravehistory.filter; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpSession; public class GHRequestWrapper extends HttpServletRequestWrapper { private Locale locale = null; public GHRequestWrapper(HttpServletRequest request) { super(request); HttpSession session = request.getSession(); locale = (Locale) session.getAttribute("WW_TRANS_I18N_LOCALE"); } @Override public Locale getLocale() { if (locale != null) { return locale; } return super.getLocale(); } }
package com.daipeng.gravehistory.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; public class I18nFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest r = (HttpServletRequest) req; GHRequestWrapper request = new GHRequestWrapper(r); filterChain.doFilter(request, resp); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
XML中如果不配置<dispatcher>FORWARD</dispatcher>等的话,某些情况下(如URL重定向等)过滤器失效
<filter-mapping> <filter-name>i18nFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
相关推荐
搭建SSH框架需要引入的Struts2 包 搭建SSH框架需要引入的Struts2 包
SSH笔记-Spring整合Struts2,作用是使用 IOC 容器来管理 Struts2 的 Action
一次下载,SSH2框架的搭建步骤 全部文档资料都有。 对于新手来说,独自完成一个完整正确的SSH框架可能是一个相当困难麻烦的事。在此我利用Myeclipse+mysql环境下使用截图外加简略文字引导初学者一步一步的搭建出一个...
MyEclipse搭建SSH框架 Struts2.1+Spring3.0+hibernate3.3
Myeclipse8.5下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3
ssh-struts中的国际化 关于文件信息配置有说明,部署到tomcat 就可以运行
spring-5_struts2整合SSH的JAVAWEB源码;我作为培训生在培训时候,接触和自己做的源码,分享一下, 为了高薪就业,我花了不少心血去参加培训,在培训中,也下了很大的功夫 ,学会了太多太多,就业之后才发现,会的...
MyEclipse 搭建Struts2+Spring2+Hibernate3整合
SSH 框架 struts-2.3.34 spring4.3.12 hibernate5.0.12 Tomcat7 jDK7 IDEA
SSH之Struts1之struts-config.xml常用配置详解(3-21-2008)
Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate(一步一步的教你敲代码)(博客园,博客名称:Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate)
F:\JavaWeb教程\ssh-jar\struts-2.2.3.16-all\struts-2.2.3.16\lib下面找到以下包 commons-fileupload-1.2.1.jar//文件上传时用的,为了以后用到,最好加入 commons-io-1.3.2.jar//同上 commons-logging-1.0.4.jar ...
Java:SSH模式-Spring整合struts2以及hibernate框架,导入直接可用,节省开发时间,十分方便,也可供参考、学习。已经配置好依赖等基础,内有增删改查的例子。
struts2-sshstruts2-sshstruts2-ssh
ssh项目的一个小例子,带mysql数据库,自定义struts1,运行环境 jdk1.5下。
这是一个J2EE-Test2-struts2集成SSH,采用现比较流行的一些技术(struts+hibernate+spring)
Myeclipse10下搭建SSH框架--struts-spring-hibernate
ssh Jar 之struts2jarssh Jar 之struts2jarssh Jar 之struts2jarssh Jar 之struts2jar
最近用到ssh整合发现忘了不少,特整理上传包含struts1和struts2
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...