关于Struts2的国际化问题在做项目时,遇到了点击首页两个链接实现系统全部国际化的问题。以下两篇文章帮助很
关于Struts2的国际化问题
在做项目时,遇到了点击首页两个链接实现系统全部国际化的问题。以下两篇文章帮助很大,故摘录下来:
?
第一篇文章:?http://whp0731.iteye.com/blog/417222
<!-- 解决中文乱码 -->
<constant name="struts.i18n.encoding" value="gbk"/>
<package name="Struts2" extends="struts-default">
<action name="changeLang" value="message"/>
<!-- 解决中文乱码 -->
<constant name="struts.i18n.encoding" value="gbk"/>
<package name="Struts2" extends="struts-default">
<action name="changeLang" type="text/css" rel="stylesheet" />
<link href="css/front.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="js/front.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<div style="float:left; margin-right:20px;"><a href="/cms/jingce/i18n/SelectLanguage.action?request_locale=zh_CN" ><s:text name="chinese"/></a></div>
<div style="float:left; margin-right:20px;"><a href="/cms/jingce/i18n/SelectLanguage.action?request_locale=en_US" ><s:text name="english"/></a></div>
struts.xml:【2】
<package name="article.front.inde2" namespace="/jingce/i18n" extends="struts-default">
<action name="SelectLanguage" method="selectLanguage" type="dispatcher">/jingce/index.jsp</result>
</action>
</package>
项目名:cms
目录结构:
按照如上的代码和配置将会产生的问题是:action能正常访问,也能正常跳转,也能正常国际化。但是跳转后页面将会变型,也就是说页面所引用的css与js以及页面内的图片地址将会找不到。
解决办法1:在jsp的head中添加如下js
<head>
<title><s:text name="title"/></title>
<link href="css/index.css" type="text/css" rel="stylesheet" />
<link href="css/front.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="js/front.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function languageChoose(language){
var lan='/cms/jingce/i18n/SelectLanguage.action?request_locale='+language;
window.location.href=lan;
}
</script>
</head>
<div style="float:left; margin-right:20px;"><a href="#" onclick="languageChoose('zh_CN')"><s:text name="chinese"/></a></div>
<div style="float:left; margin-right:20px;"><a href="#" onclick="languageChoose('en_US')"><s:text name="english"/></a></div>
解决办法2:
在所有相对路径前加入:<%=bastPath%>jingce/
例如:<%=bastPath%>jingce/css/index.css
解决办法3:
<div style="float:left; margin-right:20px;"><a href="/cms/jingce/SelectLanguage.action?request_locale=zh_CN" ><s:text name="chinese"/></a></div>
<div style="float:left; margin-right:20px;"><a href="/cms/jingce/SelectLanguage.action?request_locale=en_US" ><s:text name="english"/></a></div>
<package name="article.front.inde2" namespace="/jingce" extends="struts-default">
<action name="SelectLanguage" method="selectLanguage" type="dispatcher">/jingce/index.jsp</result>
</action>
</package>
问题思考:
解决办法1相当于重新刷新页面,解决办法2很明显灵活性不强,如果目录改动岂不要修改所有地址,个人最喜欢解决办法3。
但是为什么会出现这种情况呢,对比跳转前与跳转后的图片地址。
跳转前:http://localhost:8080/cms/jingce/img/gywm.gif
跳转后:http://localhost:8080/cms/jingce/i18n/img/gywm.gif
action时Url地址:http://localhost:8080/cms/jingce/i18n/SelectLanguage.action?request_locale=en_US
之所以经过action后(我的action返回的是当前页面)图片和css的引用地址找不到,我推测是因为action跳转后容器将去掉action后剩下的地址作为当前的目录地址也就是:http://localhost:8080/cms/jingce/i18n/http://localhost:8080/cms/jingce/i18n/ 变成了当前目录,然项目中并无当前目录更不会在其中有img目录和该目录下的图片与其它资源文件了。
但是为什么还能跳转到正常页面呢?这是因为我强行指定了跳转后的页面地址:
<result name="success" type="dispatcher">/jingce/index.jsp</result>
如果我的推测是对的那么我将结果地址改成
<result name="success" type="dispatcher">index.jsp</result>
应该也能跳转到正常页面和正常显示样式,结果一试果然如此。?