說(shuō)明:本文翻譯自:struts-2.0.8\docs\docs\validating-input.html
在驗(yàn)證輸入這一小節(jié)中,我們使用驗(yàn)證框架來(lái)驗(yàn)證提交到表單的數(shù)據(jù)。在“本地化輸出”這一節(jié)中,我們將驗(yàn)證信息移到消息資源文件中。
當(dāng)創(chuàng)建web應(yīng)用程序的時(shí)候,我們發(fā)現(xiàn)我們?cè)诙鄠€(gè)頁(yè)面中常常使用一些相同的消息或字段標(biāo)簽。如果我們的系統(tǒng)由不同語(yǔ)言的用戶(hù)使用時(shí),我們也想要本地化消息。
一. 本地化驗(yàn)證信息和屬性值
讓我們?cè)黾右粋€(gè)消息資源文件,并且在其中加入驗(yàn)證信息和字段標(biāo)簽。
1.代碼
本框架將消息資源與類(lèi)聯(lián)系起來(lái)。為了為Logon action增加一個(gè)消息資源,我們需要將消息資源文件命名為Logon.properties,并且在Logon Action后設(shè)置它的classpath。但是,大多數(shù)人發(fā)現(xiàn)為某一個(gè)類(lèi)使用一個(gè)單獨(dú)的資源文件時(shí)間和低效率的工作。很多人更喜歡為一整個(gè)類(lèi)包增加一個(gè)消息資源文件。為了做到這樣,我們可以簡(jiǎn)單的為某個(gè)包增加一個(gè)paacage.properties文件。例如。我們?yōu)?/span>tutorial包增加一個(gè)資源文件tutorial/package.properties。該文件內(nèi)容如下:
requiredstring = $\{getText(fieldName)} is required.
password = Password
username = User Name
我們還需要改變一下驗(yàn)證器和Logon頁(yè)面。
Logon-validation.xml修改的地方:
<message>Username is required</message>
<message key="requiredstring"/>
<message>Password is required</message>
<message key="requiredstring"/>
Logon,jsp修改的地方如下:
<s:textfield label="User Name" name="username"/>
<s:textfield label="%{getText('username')}" name="username"/>
<s:password label="Password" name="password" />
<s:password label="%{getText('password')}" name="password" />
2. 代碼是如何工作的?
1)“key”屬性告訴驗(yàn)證器為一個(gè)消息資源捆綁驗(yàn)證;
2) 在資源捆綁中,表達(dá)式:${getText(fieldName)}告訴框架在資源文件中查找字段名。這種方式下我們能夠?yàn)樗械姆强镇?yàn)證使用相同的默認(rèn)信息;
3)相似地,在文本域中,表達(dá)式:%{getText(‘password’)}告訴框架在資源文件中尋找“password”。
二. 本地化其余的信息
其余的頁(yè)面元素也能夠被本地化。例如,我們需要在資源文件中增加“Hello World”和“Missing page”這兩個(gè)消息。
1. 代碼
tutorial/package.properties:
# ...
HelloWorld.message = Struts is up and running ...
Missing.message = This feature is under construction. Please try again in the next interation.
這對(duì)HelloWorld是可運(yùn)行的,因?yàn)?/span>Hello World已經(jīng)存在于包中。但是它對(duì)于默認(rèn)的Missing action是不可用的,除非你將我們的基類(lèi)加入到tutorial包中。
TutorialSupport.java的代碼如下:
package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class TutorialSupport extends ActionSupport {}
并且還需要更新一下struts.xml默認(rèn)的通配符映射,如下:
<action name="*" class="tutorial.TutorialSupport">
<result>/{1}.jsp</result>
</action>
現(xiàn)在,我們可以更新HelloWorld.jsp和Missing.jsp來(lái)查找信息。
Missing.jsp的代碼如下:
This feature is under construction. Please try again in the next interation.
<s:text name="Missing.message"/>
在HelloWorld的情況下,我們從Action類(lèi)設(shè)置消息。讓我們更新一下class,使用資源文件來(lái)代替它。HelloWorld的代碼如下:
package tutorial;

public class HelloWorld extends ExampleSupport
{
public static final String MESSAGE = "HelloWorld.message";

public String execute() throws Exception
{
setMessage(getText(MESSAGE));
return SUCCESS;
}
//
}

2. 代碼是如何工作的?
1)對(duì)于Missing.jsp,我們使用text標(biāo)簽來(lái)查找資源文件中的消息;
2) 在HelloWorld中,我們?cè)?/span>Action類(lèi)中使用getText()方法來(lái)獲得消息;
3) 在HelloWorld.jsp中,只是顯示由Action類(lèi)設(shè)置的消息,所以不要做任何改變。
三. 需要記住的東西
框架支持國(guó)際化。為了本地化應(yīng)用,我們?cè)黾恿速Y源文件,并且更新某些元素或標(biāo)簽來(lái)應(yīng)用資源文件中的資源而不是靜態(tài)的文本。
下一篇:struts2-blank-2.0.8實(shí)例解析
上一篇:驗(yàn)證輸入信息
posted on 2007-08-01 08:55
阿蜜果 閱讀(2593)
評(píng)論(2) 編輯 收藏 所屬分類(lèi):
Struts2