??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美在线一卡,国产精品91xxx,国产香蕉在线http://www.aygfsteel.com/zhengzhili/书山有\勤ؓ径,学v无苦作?/description>zh-cnSat, 17 May 2025 20:34:58 GMTSat, 17 May 2025 20:34:58 GMT60- Struts2学习W记——国际化http://www.aygfsteel.com/zhengzhili/archive/2010/11/11/337481.htmlBrianBrianThu, 11 Nov 2010 14:16:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2010/11/11/337481.htmlhttp://www.aygfsteel.com/zhengzhili/comments/337481.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2010/11/11/337481.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/337481.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/337481.html
JavaE序的国际化主要通过三个cd成:
java.util.ResourceBundleQ用于加载一个资源包?/p>
java.util.LocaleQ对应一个特定的国家/区域、语a环境?/p>
java.text.MessageFormatQ用于消息格式化?/p>
而资源文件的命名方式主要有三U:baseName_language_country.properties、baseName_language.properties和baseName.properties?/p>
以下的程序可以得到Java所支持的语a和国Ӟ

public class LocalList
{

public static void main(String[] args)
{
Locale[] localeList = Locale.getAvailableLocales();

for (int i=0;i<localeList.length;i++)
{
System.out.println(localeList[i].getdisplayCountry() + "=" + localeList[i].getCountry() + " " + localeList[i].getDisplayLanguage() + "=" + localeList[i].getLanguage());
}
}
}
使用国际化的代码如:

public class Hello
{

public static void main(String[] args)
{
Locale myLocale = Locale.getDefault();
ResourceBundle bundle = ResourceBundle.getBundle("mess",myLocale);
System.out.println(bundler.getString("hello"));
}
}
如果在资源文件中Q存在例如msg = Hello,{0}!Today is {1}.q样需要程序动态插入参数的文本Q则需要用MessageFormatcȝformat()Ҏ?/p>
除了使用资源文gQ我们也可以使用cL件来代替资源文g。用Java文g代替资源文g的Java文g必须满Q?。类名必LbaseName_language_countryQ这与属性文件的命名怼?。该cdȝ承ListResourceBundleQƈ重写getContentsҎQ该Ҏq回Object数组。该数组的每一个项都是key-value寏V?/p>

public class MyResource_zh_CN extends ListResourceBundle
{
//定义资源

private final Object myData[][] =
{

{"msg","cL件消?{0},您好Q今天是{1}"}
};
@Override

public Object[][] getContents()
{
return myData;
}
}
对于体中文的LocaleQResourceBundler搜烦资源的顺序是Q?/p>
baseName_zh_CN.class;baseName_zh_CH.properties;baseName_zh.class;baseName_zh.properties;baseName.class;baseName.properties
Struts2讉K国际化消息,主要?U方式:1QJSP面输出国际化消息,可以使用Struts2?lt;s:text.../>标签Q该标签可以指定一个name属性,该属性就是资源文件中的key?Q在Action中,可以使用ActionSupportcȝgetTextҎQ该Ҏ可以接受一个name参数Q指定了国际化资源文件中的key?)表单元素的LabelQ可以ؓ表单标签指定一个key属性,q个key指定了国际化资源文g的key?/p>
对于带占位符的国际化消息Q在Action中,则需要用getText(String key, String[] args)来处理,其中args是参数列表Q而在面中,则需要ؓ<s:text.../>标签指定<s:param.../>子标{。如Q?/p>
<s:text name="welcomeMsg">
<s:param><s:property value="username"></s:param>
</s:text>
在Struts2中,q有一U更加简单的表达方式。我们可以在资源文g中写例如q样的表辑ּQfailTip=${username},对不P您不能登录!Q通过使用表达式,可以从ValueStack中取出username属性|自动填充到消息资源中。这在Action中很常用?/p>
对于一个大型应用而言Q国际化资源文g的管理也是一个非常浩大的工程。ؓ了能更好的分而治之,Struts2允许针对不同的模块、不同Action来组l国家化资源文g?/p>
为Strut2应用指定包范围资源文件的Ҏ?在包的跟路径下徏立多个文件名为package_language_country.properties的文Ӟ一旦徏立了q个pd的国际化资源文gQ应用中处于该包下的所有Action都可以访问该资源文g?/p>
例如一个Action为codes\packageScope\src\lee\action\LoginAction.javaQ那么我们可以提供package_zh_CN.properties和package_en_US.properties两个文g攑֜codes\packageScope\src\lee目录下,那么q两个文件就能被lee包及lee包下所有子包内的Action所能访问?/p>
同时Q我们也可以为LoginAction单独指定一份国际化资源文g。即在codes\packageScope\src\lee\action目录下,分别建立LoginAction_zh_CN.properties和LoginAction_en_US.properties两个文g?/p>
有时候,处于某种Ҏ的原因,我们需要时指定资源文Ӟ那么需要?lt;s:i18n.../>来充?lt;s:text.../>标签的父标签了。如Q?/p>
<s:i18n name="tmp">
<s:text name="loginPage"/>
</s:i18n>



<s:i18n name="tmp">
<s:form action="login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</s:i18n>

加蝲资源文g的顺序:
- 优先加蝲pȝ中保存在ChildAction的类文g相同位置Q且baseName为ChildAction的系列资源文件?/li>
- 如果?Q中找不到key对应的消息,且ChildAction有父cParentActionQ则加蝲pȝ中保存在ParentAction的类文g相同位置Q且baseName为ParentAction的系列资源文件?/li>
- 如果2Q中找不到key对应的消息,且ChildAction有实现接口IChildActionQ则加蝲pȝ中保存在IChildAction的类文g相同位置Q且baseName为IChildAction的系列资源文件?/li>
- 如果3Q中找不到key对应的消息,且ChildAction有实现接口ModelDrivenQ即使用模型驱动模式Q,则对于getModel()Ҏq回的model对象Q重新执?Q步操作?/li>
- 如果?Q中找不到key对应的消息,则查扑ֽ前包下baseName为package的系列资源文件?/li>
- 如果?Q中找不到key对应的消息,则沿着当前包上溯,直到最层包来查找baseName为package的系列资源文件?/li>
- 如果?Q中找不到key对应的消息,则查找struts.custom.i18n.resources帔R指定baseName的系列资源文件?/li>
- 如果l过上面步骤一直找不到key对应的消息,直接输key的字W串?/li>
对于在JSP中访问国际化消息Q则单很多,可以分ؓ两种形式Q?/p>
1Q对于?lt;s:i18n.../>标签作ؓ父标{<s:text.../>标签Q将直接?lt;s:i18n.../>标签指定的国际化资源文g中加载指定key对应的消息,如果没有Q则dstruts.custom.i18n.resources帔R指定baseName的系列文件。如果还没有Q直接输出key?/p>
2Q对于没有?lt;s:i18n.../>标签作ؓ父标{<s:text.../>标签Q则直接dstruts.custom.i18n.resources帔R指定baseName的系列文件。如果没有,直接输出key?br />
Struts2中, 我们可以通过ActionContext.getContext().setLocale(Locale arg)讄用户的默认语a。同时在Struts2 的defaultStack拦截栈中Qi18n拦截器也能设|默认语a。i18n在执行ActionҎ前,会自动查找一个名为request_locale的参数。如果这个参数存在,则拦截器会将其{换成Locale对象Qƈ设ؓ默认的Locale。同Ӟq个Locale对象会保存在Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用LSession中有WW_TRANS_I18N_LOCALE属性,则属性指定的Locale会作ؓ览器的默认Locale。因此,用户也可利用此功能来开发自行选择语言的功能?/p>

]]>- Struts2学习W记 —?上传和下?/title>http://www.aygfsteel.com/zhengzhili/archive/2010/11/07/337455.htmlBrianBrianSun, 07 Nov 2010 06:19:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2010/11/07/337455.htmlhttp://www.aygfsteel.com/zhengzhili/comments/337455.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2010/11/07/337455.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/337455.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/337455.html#指定使用COS的文件上... 阅读全文

]]> - Struts2学习W记——输入校验(二)http://www.aygfsteel.com/zhengzhili/archive/2010/10/24/336024.htmlBrianBrianSun, 24 Oct 2010 07:35:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2010/10/24/336024.htmlhttp://www.aygfsteel.com/zhengzhili/comments/336024.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2010/10/24/336024.html#Feedback1http://www.aygfsteel.com/zhengzhili/comments/commentRss/336024.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/336024.html
对于loginҎ的校验,可以通过<ActionClassName>-<ActionAliasName>-validation.xml文g来校验,即RegistAction-login-validation.xml文gq行校验。同ӞRegistAction-validation.xml的校验规则仍旧对loginҎ有效。即loginҎ的校验规则是Region-validation.xml和RegistAction-login-validation.xml的d?br />
如果RegistActionl承了BaseActionQ那么对于BaseActioncȝ校验规则也会被RegistActioncLl承校验。具体来_其校验规则的搜烦文g规则如下Q?br />
BaseAction-validation.xml
BaseAction-别名-validation.xml
RegistAction-validation.xml
RegistAction-别名-validation.xml
对于Struts2所支持的内建校验器Q我们可以通过xwork.2.1.2.jar中的com/opensymphony/xwork2/validator/validators/default.xml文g查看?/p>
除了配置文gQStruts2也支持Annotation。下面就是用Annotation配置的RegistAction:
@Validation()
public class RegistAction extends ActionSupport {
private static final long serialVersionUID = -2113900523366315993L;
//该请求包含的4个请求参?br />
private String name;
private String pass;
private int age;
private Date birth;
public String getName() {
return name;
}
@RequiredStringValidator(type=ValidatorType.FIELD,key="name.required",message="")
@RegexFieldValidator(type=ValidatorType.FIELD,expression="\\w{4,25}",key="name.regex",message="")
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
@RequiredStringValidator(type=ValidatorType.FIELD,key="pass.required",message="")
@RegexFieldValidator(type=ValidatorType.FIELD,expression="\\w{4,25}",key="pass.regex",message="")
public void setPass(String pass) {
this.pass = pass;
}
public int getAge() {
return age;
}
@IntRangeFieldValidator(message="",key="age.range",min="1",max="150")
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
@DateRangeFieldValidator(message="",key="birth.range",min="1900/01/01",max="2050/01/21")
public void setBirth(Date birth) {
this.birth = birth;
}
}

对于不能通过内置校验器进行校验的逻辑Q则可通过重写validate()Ҏ来实现。如果一个Action中存在多个逻辑处理Q则需要通过validateXxx()Ҏ来分别进行校验,其中Xxx代表Ҏ名。如login()Ҏ对应的校验方法ؓvalidateLogin()?/p>
Struts2的输入校验流E:
1。类型{换器负责对字W串的请求参数执行类型{换,q将q些D|成Action的属性倹{?/p>
2。在执行cd转换q程中,如果发生异常Q则异怿存到ActionContext中,q由conversionError拦截器负责将其封装到fieldError里。然后执行第3步;如无异常Q直接执行第3步?/p>
3。调用Struts2内置的输入校验规则进行输入校?/p>
4。通过攑ְ调用validateXxx()Ҏ?/p>
5。调用validate()Ҏ?/p>
6。如果上q都未发生fieldErrorQ将调用Action里处理用戯求的处理ҎQ如果出CfieldErrorQ则转入input逻辑视图所指定的视图资源?

]]> - Struts2学习W记——输入校验(一Q?/title>http://www.aygfsteel.com/zhengzhili/archive/2010/10/24/336019.htmlBrianBrianSun, 24 Oct 2010 07:01:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2010/10/24/336019.htmlhttp://www.aygfsteel.com/zhengzhili/comments/336019.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2010/10/24/336019.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/336019.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/336019.html阅读全文

]]> - ExtJs----数据存储与传?/title>http://www.aygfsteel.com/zhengzhili/archive/2009/10/27/299801.htmlBrianBrianTue, 27 Oct 2009 03:00:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2009/10/27/299801.htmlhttp://www.aygfsteel.com/zhengzhili/comments/299801.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2009/10/27/299801.html#Feedback1http://www.aygfsteel.com/zhengzhili/comments/commentRss/299801.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/299801.html阅读全文

]]> - ExtJs----工具栏和菜单http://www.aygfsteel.com/zhengzhili/archive/2009/10/26/299767.htmlBrianBrianMon, 26 Oct 2009 06:43:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2009/10/26/299767.htmlhttp://www.aygfsteel.com/zhengzhili/comments/299767.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2009/10/26/299767.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/299767.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/299767.html阅读全文

]]> - ExtJs----布局http://www.aygfsteel.com/zhengzhili/archive/2009/10/26/299732.htmlBrianBrianMon, 26 Oct 2009 04:23:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2009/10/26/299732.htmlhttp://www.aygfsteel.com/zhengzhili/comments/299732.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2009/10/26/299732.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/299732.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/299732.html阅读全文

]]> - ExtJs----弹出H口http://www.aygfsteel.com/zhengzhili/archive/2009/10/25/299652.htmlBrianBrianSun, 25 Oct 2009 03:24:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2009/10/25/299652.htmlhttp://www.aygfsteel.com/zhengzhili/comments/299652.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2009/10/25/299652.html#Feedback2http://www.aygfsteel.com/zhengzhili/comments/commentRss/299652.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/299652.htmlExt.MessageBox
1
//Ext.MessageBox.alert()
2
Ext.MessageBox.alert('标题','内容',function(btn)
{
3
alert('你刚刚点M' + btn);
4
});
5
6
//Ext.MessageBox.confirm()
7
Ext.MessageBox.confirm('选择?,'你到底是选择Yesq是No?', function(btn)
{
8
alert('你刚刚点M' + btn);
9
});
10
11
//Ext.MessageBox.prompt()
12
Ext.MessageBox.prompt('输入?,'随便输入一些东?, function(btn,text)
{
13
alert('你刚刚点M' + btn + ", 刚刚输入?/span>" + text);
14
});
对话框的更多配置
1
//可以输入多行的输入框
2
Ext.MessageBox.show(
{
3
title:'多行输入?,
4
msg:'你可以多输入好几?,
5
width:300,
6
buttons:Ext.MessageBox.OKCANCEL,
7
multiline:true,
8
fn:function(btn,text)
{
9
alert('你刚刚点M' + btn + ", 刚刚输入?/span>" + text);
10
}
11
});
12
13
//自定义对话框的按?/span>
14
Ext.MessageBox.show(
{
15
title:'随便按个按钮',
16
msg:'从三个按钮里随便选择一?,
17
buttons:Ext.MessageBox.YESNOCANCEL,
18
multiline:true,
19
fn:function(btn)
{
20
alert('你刚刚点M' + btn);
21
}
22
});
Ext.MessageBox中预讄4个按钮分别是OKQYesQNoQCancel。如果不使用YESNOCANCELq种预设变量Q也可以直接使用{ok:true, yes:true, no:true,cancel:true}的Ş式,q样4个按钮都会显C在对话框中?br />
q度?br />
1
Ext.MessageBox.show(
{
2
title:'L?,
3
msg:'d数据?,
4
width:240,
5
progress:true,
6
closable:false //隐藏对话框右上角的关闭按钮,从而禁止用户关闭进度条
7
});
8
9
//也可以直接用Ext.MessageBox.progress()
10
Ext.MessageBox.progress('L?,msg:'d数据?);
11
上述的进度状态时不会发生变化的,我们需要调用Ext.MessageBox.updateProgress()函数Q如以下为每U变化,10U后隐藏Q?br />
1
var f = function(v)
{
2
return function()
{
3
if (v == 11)
{
4
Ext.MessageBox.hide();
5
} esle
{
6
Ext.MessageBox.updateProgress(v/10,'正在dW? + v + '个,一?0?);
7
}
8
};
9
};
10
for (var i = 1 ; i < 12 ; i++)
{
11
setTimeout(f(i) , i*1000);
12
}
q可以用一U自动变化的q度条提C框Q如Ext.MessageBox.wait('L?, msg: ' d数据?);
动画效果
可以为对话框q是弹出和关闭的动画效果Q用animEl参数指定一个HTML元素Q对话框׃依据指定的HTML元素播放弹出和关闭的动画?br />
H口分组
1
<script type="text/javascript">
2
var i = 0 , mygroup;
3
4
function newWin()
{
5
var win = new Ext.Window(
{
6
title:'H口'+ i++,
7
width:400,
8
height:300,
9
maximizable:true,
10
manager:mygroup
11
});
12
win.show();
13
}
14
15
function toBack()
{
16
mygroup.sendToBack(mygroup.getActive());
17
}
18
19
function hideAll()
{
20
mygroup.hideAll();
21
}
22
23
Ext.onReady(function()
{
24
mygroup = new Ext.WindowGroup();
25
26
Ext.get("btn").on("click",newWin);
27
Ext.get("btnToBack").on("click",toBack);
28
Ext.get("btnHide").on("click",hideAll);
29
});
30
</script>
31
32
<BODY>
33
<input id="btn" type="button" name="add" value="新窗?/span>"/>
34
<input id="btnToBack" type="button" name="btnToBack" value="攑ֈ后台"/>
35
<input id="btnHide" type="button" name="btnHide" value="隐藏所?/span>"/>
36
</BODY>
CZ中,所有通过newWind()Ҏ产生的窗口都属于mygroupH口l?

]]> - ExtJs----拖放http://www.aygfsteel.com/zhengzhili/archive/2009/10/23/299494.htmlBrianBrianFri, 23 Oct 2009 15:42:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2009/10/23/299494.htmlhttp://www.aygfsteel.com/zhengzhili/comments/299494.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2009/10/23/299494.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/299494.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/299494.html阅读全文

]]> - ExtJs----Ext支持的控?/title>http://www.aygfsteel.com/zhengzhili/archive/2009/10/22/299322.htmlBrianBrianThu, 22 Oct 2009 06:31:00 GMThttp://www.aygfsteel.com/zhengzhili/archive/2009/10/22/299322.htmlhttp://www.aygfsteel.com/zhengzhili/comments/299322.htmlhttp://www.aygfsteel.com/zhengzhili/archive/2009/10/22/299322.html#Feedback0http://www.aygfsteel.com/zhengzhili/comments/commentRss/299322.htmlhttp://www.aygfsteel.com/zhengzhili/services/trackbacks/299322.html阅读全文

]]>
վ֩ģ壺
|
̨|
˴|
|
|
|
|
|
Ӧñر|
|
ݳ|
|
|
|
|
ͼ|
|
|
|
˻|
Ƹ|
Դ|
ɽ|
Ȫ|
|
³|
̫ԭ|
Դ|
|
կ|
|
|
ɽ|
Ͻ|
|
|
|
ɳ|
ʩ|
ɽ|
ٹ|