﻿<?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-理想青年</title><link>http://www.blogjava.net/richyzhang/</link><description>理想</description><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 05:20:02 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 05:20:02 GMT</pubDate><ttl>60</ttl><item><title>1 在struts2中使用资源文件</title><link>http://www.blogjava.net/richyzhang/archive/2007/05/22/119099.html</link><dc:creator>richy.zhang</dc:creator><author>richy.zhang</author><pubDate>Tue, 22 May 2007 04:34:00 GMT</pubDate><guid>http://www.blogjava.net/richyzhang/archive/2007/05/22/119099.html</guid><wfw:comment>http://www.blogjava.net/richyzhang/comments/119099.html</wfw:comment><comments>http://www.blogjava.net/richyzhang/archive/2007/05/22/119099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/richyzhang/comments/commentRss/119099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/richyzhang/services/trackbacks/119099.html</trackback:ping><description><![CDATA[struts2的资源文件如同其验证文件一样，是允许分散和集中的。使用范围在于Tags和field error中描述信息的查找。整个搜索顺序如下：
<ol>
    <ol>
        <li>ActionClass.properties&nbsp; 或者ActionClass_xx_XX.properties (xx_XX可以为zh_CN等)
        <li>BaseClass.properties
        <li>Interface.properties
        <li>ModelDriven's model (如果实现了getModel())的类文件
        <li>package.properties (包括superclass的package)
        <li>search up the i18n message key hierarchy itself
        <li>global resource properties </li>
    </ol>
</ol>
<p>&nbsp;global资源文件可如此定义：在struts.properties中插入</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">struts.custom.i18n.resources=globalMessages</span></div>
那么globalMessages.properties或者globalMessages_zh_CN.properties就成为全局资源文件。全局文件一般放在src文件夹下。而下面的代码说明资源文件globalMessages位于com.sanss 这个package下面<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">struts.custom.i18n.resources=com.sanss.globalMessages</span></div>
<br>又可定义RingManage.properties放到与class相同的目录。还可以将资源文件命名成package.properties.搜索的顺序都是stack式的。<br>在资源文件中，输入的内容是属性对key-value，例如<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">invalid.ringName=请输入铃音名<br>text.createRing=创建铃音<br>format.date=格式化日期</span></div>
这个key可在几处地方被调用<br>1. 使用<span style="BACKGROUND-COLOR: yellow">&lt;s:text name="text.createRing" /&gt;<br></span>2. getText方式&nbsp;
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">s:property&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="getText('text.createRing')"</span><span style="COLOR: #0000ff">/&gt;<br></span><span style="COLOR: #000000">&nbsp; &lt;s:textfield label="%{getText('text.name')}" name="category.name"/&gt; <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>3.被validator的配置文件引用key。例如在RingManage-validation.xml中的
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">message&nbsp;</span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="invalid.ringName"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">message</span><span style="COLOR: #0000ff">&gt;</span></div>
如果在name中以%{...}包裹一个名字，则会先在value-stack中进行ongl转换，然后再去资源文件中获取文本。<br><span style="BACKGROUND-COLOR: yellow">&lt;s:text name="%{text}" /&gt;<br></span>&nbsp;<br>在设置ui控件的label属性时，则getText使用的更为广泛。从中我们也可以看出%{}的一大用法就是计算ognl表达式的值，而不是直接使用引号中的内容。<br><br><em>参数化</em>两种方式<br>1 直接在资源文件中使用ongl表达式，用${}包裹<br>2 numbered placeholders {0} through {9}.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">item.edit=Edit&nbsp;{0}</span></div>
使用numbered placeholders时也有两种方式<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">s:text&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="format.date"</span><span style="COLOR: #ff0000">&nbsp;value0</span><span style="COLOR: #0000ff">="created"</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">s:text&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="format.date"</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">ww:param&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="created"</span><span style="COLOR: #0000ff">/&gt;&lt;/</span><span style="COLOR: #800000">s:text</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>附：资源文件的命名规则<br>类名.properties 、package.properties 等前已描述，现在主要说说&#8216;_&#8217;之后的字符的含义。<br>这些字符其实最后用于jdk中java.util.Locale实例的构造。<br>
<p>●&nbsp;&nbsp;&nbsp; <strong>Locale<o:p></o:p></strong></p>
<p>该类包含对主要地理区域的地域化特征的封装。通过设定Locale，我们可以为特定的国家或地区提供符合当地文化习惯的字体、符号、图标和表达格式。例如，我们可以通过获得特定Locale下的Calendar类的实例，显示符合特定表达格式的日期。Locale有以下三个构造函数：<o:p></o:p></p>
<p>☆&nbsp;&nbsp;&nbsp;&nbsp; Locale(String language)<o:p></o:p></p>
<p>☆&nbsp;&nbsp;&nbsp;&nbsp; Locale(String language,String country)<o:p></o:p></p>
<p>☆&nbsp;&nbsp;&nbsp;&nbsp; Locale(String language,String country,String variant)<o:p></o:p></p>
<strong>language参数</strong>：两个小写英文字符，如zh表示Chinese<br><strong>country参数</strong>：代表两个大写英文字符的ISO国家或地区编码，如，CN表示China<br><strong>variant参数</strong>：代表与供应商或浏览器相关的代码。如，WIN表示windows，MAC表示Macintosh，POSIX表示POSIX.<br>因此当资源文件给出_zh_CN或_zh都可以成功地构造Locale实例。 
<img src ="http://www.blogjava.net/richyzhang/aggbug/119099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/richyzhang/" target="_blank">richy.zhang</a> 2007-05-22 12:34 <a href="http://www.blogjava.net/richyzhang/archive/2007/05/22/119099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>