属性文件存储用户名,密码信息,并以中文字符提交。此属性文件以utf-8格式创建的,但内容不使用 native2ascii 编码。
让我们试着通过一些ui标签,来显示中国汉字。查看页面声明为utf-8格式的html元标记来显示。
... <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> ... <s:form action="validateuser"> <s:textfield key="global.username" name="username"/> <s:password key="global.password" name="password"/> <s:submit key="global.submit" name="submit" /> <div>testing 1 : <s:property value="gettext('global.username')" /></div> <div>testing 2 : <s:text name="global.password" /></div></br/> </s:form> ... <s:url id="localezhcn" namespace="/" action="locale" > <s:param name="request_locale" >zh_cn</s:param> </s:url> ... <s:a href="%{localezhcn}" >chinese</s:a> ...
结果
<s:textfield key="global.username" name="username"/> <s:password key="global.password" name="password"/> testing 2 : <s:text name="global.password" />
深入到 textprovider.gettext()的源代码后,它使用的资源 bundle.getstring()来从资源包检索的消息,所以不正确的消息是合理的。但是,为什么“s:text“, “s:textfield” 和 “s:password” 能够正确显示了中文的消息,为什么“s:submit”会失败?在有太多的问题,让我们看看示例2...
这一次,属性文件使用native2ascii工具处理中国汉字的编码正确。
结果如下所示:
其结果是完全逆转,现在 “s:submit” 和 “gettext()” 是能够正确地显示它,但其他ui组件失败。 这里是按预期方式工作的,因为在struts 2推荐使用gettext(),以显示国际化或本地化的消息。问题是,为什么“s:submit”会不同呢?
这里有几个问题:
<s:text name="global.username"/> <s:property value="gettext('global.username')"/>
然而,这仅适用于英国或一些“英语状(欧洲)” 的字符,如法文,德文。但对中文或日文,这两种方法将返回完全不同的输出。真的不知道struts2的本地化该怎么办了。
<head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head>
在struts2,meta标签不起作用,我们应该把 <%@ page contenttype=”text/html;charset=utf-8″ %>标签放在页面的第一行。例如下面的代码片断:
<%@ page contenttype="text/html;charset=utf-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> </head> ...
结果显示如下: