`

搭建SSH,从零开始(第N-1天)—Struts2国际化以及语言切换

阅读更多

参考文章: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&currentUrl=<%=request.getServletPath()%>">中文</a>
<a href="<%=pageContext.getAttribute("basePath")%>lang.action?local=en_US&currentUrl=<%=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>

 

 

分享到:
评论

相关推荐

    传智168期JavaEE struts2杜宏 day 29~day31笔记.pdf

    - 开发者可以通过导入Struts2的jar包开始Struts2框架的学习,其中提供了示例程序,可以避免从零开始配置。 - 理解Struts2的目录结构和基本开发流程对于入门非常关键,包括创建index.jsp和hello.jsp页面,配置web....

    SSH框架配置攻略

    ### SSH框架配置攻略详解 ...本攻略提供了详细的步骤指导,帮助开发者从零开始搭建一个完整的SSH开发环境。通过遵循本文档的指导,可以有效减少配置过程中的问题和障碍,使开发者能够更快地投入到实际的开发工作中去。

    [SSH+Maven+Bootstrap视频教程]_第 十七 讲.zip

    4. **实战演示**:通过一个具体的实例,展示如何从零开始创建一个SSH+Maven+Bootstrap的Web应用,包括创建Maven项目、配置SSH框架、集成Bootstrap以及进行简单的功能开发。 5. **问题解决**:讨论在实际开发中可能...

    尚硅谷教学视频

    - **Android从入门到实战**:从零开始学习Android开发,最终完成一个完整的项目,巩固所学知识。 #### 8. 高级主题 - **Android实战_来电拦截专家**:通过具体的来电拦截项目,学习Android权限管理、电话状态监听等...

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    在Java EE中,进一步涉及到Servlet、JSP、MVC模式以及SSH(Struts、Spring、Hibernate)框架等企业级开发技术。 总之,Java是一个强大且灵活的编程语言,适用于各种应用场景,从桌面应用到Web服务,再到移动设备,...

Global site tag (gtag.js) - Google Analytics