参考文章: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、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。在构建SSH框架时,每个框架都扮演着不同的角色,以提供一个高效、可扩展的后端架构。现在我们来详细了解一下搭建SSH...
SSH(Spring、Struts2和...总之,SSH-Struts中的国际化涉及到资源文件的创建、配置文件的设置以及在视图层使用合适的标签来显示多语言文本。通过合理的配置和编程,你可以轻松地为你的SSH应用提供全球化的用户体验。
在开始搭建 SSH 框架之前,需要首先配置 Tomcat。Tomcat 是一个流行的 Java web 服务器,它提供了一个功能强大且灵活的环境来部署和运行 Java web 应用程序。在配置 Tomcat 之前,需要首先配置 Tomcat 的路径和 JDK ...
在Java开发领域,Struts2、Spring和Hibernate这三大框架的整合,简称SSH2,是常见的企业级应用开发模式。MyEclipse作为一款强大的Java集成开发环境,提供了便捷的SSH2整合支持。以下是详细的搭建步骤及知识点解析: ...
一次下载,SSH2框架的搭建步骤 全部文档资料都有。 对于新手来说,独自完成一个完整正确的SSH框架可能是一个相当困难麻烦的事。在此我利用Myeclipse+mysql环境下使用截图外加简略文字引导初学者一步一步的搭建出一个...
本文将详细介绍如何在MyEclipse 8.5环境下搭建基于Struts2.1、Spring3.0以及Hibernate3.3的SSH框架,并通过图解的方式引导读者完成整个搭建过程。 #### 二、创建 Web 项目 首先,需要在MyEclipse 8.5中创建一个新...
在IT行业中,SSH2框架是三个流行开源框架的组合,分别是Struts2、Spring和Hibernate,用于构建高效、模块化的企业级Java应用。在Myeclipse这个强大的集成开发环境中,可以方便地搭建SSH2框架。以下将详细介绍如何...
Struts2语言国际化是开发多语种Web应用的关键技术,它允许用户根据其浏览器设置或用户选择的语言来显示相应的界面内容。以下是对Struts2语言国际化配置和使用的详细讲解。 一、准备工作 在开始之前,确保你的项目...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了一种高效且强大的方式来构建企业级应用,它整合了模型-视图-控制器(MVC)设计模式、依赖注入(DI)...
相比于SSH1中的Struts1,Struts2引入了更多先进的特性,如拦截器、OGNL表达式语言、以及对注解的支持。在配置上,Struts2不再依赖Servlet,而是通过`Filter`(StrutsPrepareAndExecuteFilter)进行配置,简化了web....
SSH项目,全称为Struts2、Spring和Hibernate的集成,是一种经典的Java Web开发框架组合。然而,根据提供的信息,这里提到的是一个基于Struts1的项目,而不是Struts2。Struts1是Apache软件基金会的一个开源项目,它...
spring-5_struts2整合SSH的JAVAWEB源码;我作为培训生在培训时候,接触和自己做的源码,分享一下, 为了高薪就业,我花了不少心血去参加培训,在培训中,也下了很大的功夫 ,学会了太多太多,就业之后才发现,会的...
SSH2框架,全称为Spring、Struts2和Hibernate2的集成框架,是Java Web开发中的一个常见组合。这个实例源码使用的是Spring 3.2、Struts2 2.3.4和Hibernate 4.2这三个框架的较新版本,提供了一个基础的用户登录和用户...
- **struts.properties**: 该文件主要用于配置Struts2的一些全局属性,例如国际化编码设置`struts.i18n.encoding=GBK`,以及对象工厂`struts.objectFactory=spring`的指定等。 ##### 2. Spring 配置 Spring 框架是...
同时,熟悉Struts2的Action、Interceptor、Result、自由标记库(FreeMarker或JSP)等概念,了解Spring的IoC和AOP,以及Hibernate的对象映射和查询语言HQL,这些都是构建SSH应用的基础。通过实践,你可以深入理解这些...
SSH之Struts1之struts-config.xml常用配置详解(3-21-2008)
- Struts2有许多官方和第三方插件,如i18n、json、freemarker等,它们的配置在`struts-plugin.xml`中完成。 8. **Action与Service层整合** - Spring管理Service层对象,Struts2通过Spring插件注入Service,实现...
在本项目中,我们主要探讨的是一个基于SSH2(Spring、Struts2和Hibernate)框架构建的日志管理系统,结合了Ztree和Bootstrap技术,提供了一种实用的企业级解决方案。SSH2是一个广泛应用于Java Web开发的开源框架组合...
在开始SSH2搭建前,需要确保已经安装并配置好了以下环境: 1. **JDK**:Java Development Kit,用于Java应用程序的编译与运行。 2. **MyEclipse 6.0**:集成开发环境,提供了丰富的功能支持,如项目管理、代码编辑...