﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Lajumboer Studio-随笔分类-JSF</title><link>http://www.blogjava.net/lajumboer/category/23000.html</link><description>Nothing venture  Nothing have</description><language>zh-cn</language><lastBuildDate>Tue, 05 Jun 2007 11:08:41 GMT</lastBuildDate><pubDate>Tue, 05 Jun 2007 11:08:41 GMT</pubDate><ttl>60</ttl><item><title>JSF的中文化与国际化</title><link>http://www.blogjava.net/lajumboer/archive/2007/06/04/121996.html</link><dc:creator>lajumboer</dc:creator><author>lajumboer</author><pubDate>Mon, 04 Jun 2007 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/lajumboer/archive/2007/06/04/121996.html</guid><wfw:comment>http://www.blogjava.net/lajumboer/comments/121996.html</wfw:comment><comments>http://www.blogjava.net/lajumboer/archive/2007/06/04/121996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lajumboer/comments/commentRss/121996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lajumboer/services/trackbacks/121996.html</trackback:ping><description><![CDATA[<div><span><span>下面转载别人的方法(在编辑过程中不小心丢失了原文章地址,在此向作者致以歉意以及感谢),也就是我参考的主要方法.但完全依照下面所述并未解决我的问题.<br>我用的是MyEclipse5.1.1 GA ,Eclipse3.2.2 ,JSF是sun 的参考实现1.1.x<br>我首先安装了</span></span><span><span>Eclipse
ResourceBundle
Editor(http://sourceforge.net/project/showfiles.php?group_id=125041),可以用
它方便的创建资源包,但是我在.properties文件中写中文后保存文件时,eclipse就会弹出
"保存问题"警告,说某些字符无法用"ISO-8859-1"来对应(翻译的不准确,大概是这个意思).<br>后来我就在google上找帮助,有文章说用</span></span><span><span>Eclipse
Properties Editor 4.8.2(http://propedit.sourceforge.jp/eclipse/updates/
直接在eclipse中更新),于是我又在eclipse下安装了它,重新启动eclipse后发现,里面的</span></span><span><span>.properties文件的图标也变化了,图标里有一个大写的P,呵呵,心里隐约觉得问题应该解决了,于是在原本建好的</span></span><span style="font-size: 9pt;">resource_zh_CN.properties中写中文,保存,OK!然后在浏览器里查看.中文正常显示了.<img  src="http://st.blog.163.com/style/common/htmlEditor/portrait/face/preview/face12.gif"></span><br><span><span>对了,在设置上,我对MyEclipse 中的各个editor的编码设置都是utf-8<br></span></span><span><span></span></span><span><span>-------------------------------------------------------------------------------------------<br>&nbsp;&nbsp; </span></span><span style="font-size: 9pt; font-family: 宋体;">对于各种不同的</span><span style="font-size: 9pt;">Java</span><span style="font-size: 9pt; font-family: 宋体;">应用，国际化的问题总会给我们非英文用户带来一些麻烦，在</span><span style="font-size: 9pt;">JSF</span><span style="font-size: 9pt; font-family: 宋体;">中也一样，在实践中碰到了一系列不容易解决的问题，最终解决的大部分的问题，也完成了一个可以运行的小项目，我把我的一些经验拿出来和大家分享一下，希望能让大家在这些地方少走一些弯路。</span><span style="font-size: 9pt;"></span></div>
<p><span style="font-size: 9pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Java</span><span style="font-size: 9pt; font-family: 宋体;">中的国际化是由</span><span style="font-size: 9pt;"> java.util.Locale </span><span style="font-size: 9pt; font-family: 宋体;">类支持的，中文对应的代码是&#8220;</span><span style="font-size: 9pt;">zh</span><span style="font-size: 9pt; font-family: 宋体;">&#8221;，所以我们要在</span><span style="font-size: 9pt;">JSF</span><span style="font-size: 9pt; font-family: 宋体;">中使用中文的话，需要在我们的</span><span style="font-size: 9pt;"> faces-config.xml </span><span style="font-size: 9pt; font-family: 宋体;">中做一些简单的配置了，加入对中文的支持，当然如果需要支持更多的语言的话，多加几个</span><span style="font-size: 9pt;">&lt;supported-locale&gt;</span><span style="font-size: 9pt; font-family: 宋体;">就可以了。</span><span style="font-size: 9pt;"></span></p>
<p align="center">
</p>
<p><span style="font-size: 9pt;">&nbsp;</span></p>
<span>
<div><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">faces-config</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">application</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">message-bundle</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">resource</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">message-bundle</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">locale-config</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><font size="-0"><font size="-0"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">default-locale</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">zh</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">default-locale</span><span style="color: #0000ff;">&gt;</span></font></font><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">supported-locale</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">en</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">supported-locale</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">locale-config</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">application</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><img  src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">faces-config</span><span style="color: #0000ff;">&gt;</span></div>
</span>
<p><br>&nbsp;</p>
<p><span style="font-size: 9pt; font-family: 宋体;">这里定义了一个</span><span style="font-size: 9pt;">&lt;message-bundle&gt;resource&lt;/message-bundle&gt;</span><span style="font-size: 9pt; font-family: 宋体;">指的是资源文件所在的位置和文件名，这里我们把资源文件放在</span><span style="font-size: 9pt;">source</span><span style="font-size: 9pt; font-family: 宋体;">根目录下名称为</span><span style="font-size: 9pt;">resource.properties</span><span style="font-size: 9pt; font-family: 宋体;">，这个是英文的资源文件，另外一个存放中文信息的资源文件名为</span><span style="font-size: 9pt;">resource_zh.properties</span><span style="font-size: 9pt; font-family: 宋体;">。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">接下来，我们可以在这些资源文件中加入我们需要的资源信息。推荐大家一个</span><span style="font-size: 9pt;">Eclipse</span><span style="font-size: 9pt; font-family: 宋体;">的插件来写我们的资源文件，这个插件叫做</span><span style="font-size: 9pt;">Eclipse ResourceBundle Editor Plugin</span><span style="font-size: 9pt; font-family: 宋体;">，我们可以很方便的在里面写中文信息，它会自动的转换为</span><span style="font-size: 9pt;">UTF-8</span><span style="font-size: 9pt; font-family: 宋体;">编码的信息，大家可以到这个地方去下载这个插件</span><span style="font-size: 9pt;"><a  href="http://resourcebundleeditor.com/ess/rbe/home.do">http://resourcebundleeditor.com/ess/rbe/home.do</a></span><span style="font-size: 9pt; font-family: 宋体;">。使用起来很简单，这里就不再多说了。<br></span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">在</span><span style="font-size: 9pt;">JSP</span><span style="font-size: 9pt; font-family: 宋体;">文件中使用这些资源之前，需要加入一下这些东西：</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;"><font size="-0">&lt;%@ page contentType="text/html;charset=utf-8"%&gt;</font></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">在</span><span style="font-size: 9pt;">HTML</span><span style="font-size: 9pt; font-family: 宋体;">的</span><span style="font-size: 9pt;">head</span><span style="font-size: 9pt; font-family: 宋体;">中加入：</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;"><font size="-0">&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;</font></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">下面，我们就可以在我们的页面中绑定并使用这些资源信息：</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">使用之前要加载一下资源文件，使用这个</span><span style="font-size: 9pt;">Tag</span><span style="font-size: 9pt; font-family: 宋体;">：</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;"><font size="-0">&lt;f:loadBundle basename="resource" var="messages"/&gt;</font></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">我在这里给消息起了个别名</span><span style="font-size: 9pt;">messages</span><span style="font-size: 9pt; font-family: 宋体;">，以后就可以通过这个别名来使用资源文件。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">比如我使用</span><span style="font-size: 9pt;"> &lt;h:outputText&gt; </span><span style="font-size: 9pt; font-family: 宋体;">来引用资源信息</span><span style="font-size: 9pt;">schedule.label.starttime</span><span style="font-size: 9pt; font-family: 宋体;">可以这么用。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;">&lt;h:outputText value="#{messages['schedule.label.starttime']}"/&gt;</span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">是不是可以用了呢？不过别急，用是能用，如果你在</span><span style="font-size: 9pt;"> JSF </span><span style="font-size: 9pt; font-family: 宋体;">中使用了</span><span style="font-size: 9pt;"> Tiles </span><span style="font-size: 9pt; font-family: 宋体;">的话，就会出现一些问题了，我们如果使用了</span><span style="font-size: 9pt;"> &lt;h:inputText&gt; </span><span style="font-size: 9pt; font-family: 宋体;">这样的输入框的话，当你输入中文并提交，你就会发现，你输入的文字变成这样的了&#8220;</span><span style="font-size: 9pt;">\u5DF2\u5B8C\u6210</span><span style="font-size: 9pt; font-family: 宋体;">&#8221;，曾经为了这个问题，找解决方案花了我三周的时间。首先把问题定位到</span><span style="font-size: 9pt;"> Tiles </span><span style="font-size: 9pt; font-family: 宋体;">上，因为如果不使用</span><span style="font-size: 9pt;"> Tiles </span><span style="font-size: 9pt; font-family: 宋体;">的话，是没有这个问题的，但是</span><span style="font-size: 9pt;"> Tiles </span><span style="font-size: 9pt; font-family: 宋体;">又不能不用的，最后发现其实很容易的，只要在</span><span style="font-size: 9pt;"> &lt;f:view&gt; </span><span style="font-size: 9pt; font-family: 宋体;">中加上</span><span style="font-size: 9pt;"> locale=&#8221;zh&#8221; </span><span style="font-size: 9pt; font-family: 宋体;">就可以了，如果需要的话，可以把这个属性动态化，满足国际化的需要，就像这样</span><span style="font-size: 9pt;">&lt;f:view locale="#{userProfile.locale}"&gt;</span><span style="font-size: 9pt; font-family: 宋体;">。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">这样的话，一切都正常了，使用</span><span style="font-size: 9pt;"> Tiles </span><span style="font-size: 9pt; font-family: 宋体;">也没有问题的。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">今天有朋友问了我关于</span><span style="font-size: 9pt;"> JavaScript </span><span style="font-size: 9pt; font-family: 宋体;">中的中文乱码问题，我在我的</span><span style="font-size: 9pt;">JSP</span><span style="font-size: 9pt; font-family: 宋体;">中找了一段代码拿出来看看：</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;">&lt;h:commandLink  action=".." (!confirm('#{messages['system.msg.confirmdel']}')) return false;"&gt;</span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">这样的话，里面的中文是可以正常显示的，下面我给大家一些建议吧，希望对大家有一些帮助。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;"><span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: 9pt; font-family: 宋体;">所有文字信息全部写在资源文件中，通过引用其别名来使用这些信息；</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;"><span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: 9pt; font-family: 宋体;">所有的中文要转换成</span><span style="font-size: 9pt;"> UTF-8 </span><span style="font-size: 9pt; font-family: 宋体;">编码，可以使用</span><span style="font-size: 9pt;">Eclipse ResourceBundle Editor Plugin</span><span style="font-size: 9pt; font-family: 宋体;">来解决；</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt;"><span>3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="font-size: 9pt; font-family: 宋体;">页面编码方式定义成</span><span style="font-size: 9pt;"> UTF-8 </span><span style="font-size: 9pt; font-family: 宋体;">，不要使用其默认值。</span><span style="font-size: 9pt;"></span></p>
<p><span style="font-size: 9pt; font-family: 宋体;">当然，这只是我在使用中积累的一点小小的经验了，希望能对大家有一点帮助，如果大家发现有什么不正确就请赐教，如果更好的解决方案，也拿出来和大家分享吧，因为我们的分享可能会给大家节省更多的时间。</span></p><img src ="http://www.blogjava.net/lajumboer/aggbug/121996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lajumboer/" target="_blank">lajumboer</a> 2007-06-04 22:36 <a href="http://www.blogjava.net/lajumboer/archive/2007/06/04/121996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>