value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
五、Struts文件上传
*导入commons-fileupload.jar
*页面的配置,如:
标题:
文件:
*ActionForm中使用FormFile来接收上传的文件。
*在Action中调用FormFile取得上传文件数据,采用流输出,即完成上传。
UploadActionFormuaf=(UploadActionForm)form;
FormFilemyFile=uaf.getMyfile();
if(myFile!
=null){
FileOutputStreamfos=newFileOutputStream("c:
\\"+myFile.getFileName());
fos.write(myFile.getFileData());
fos.flush();
fos.close();
}
*可以在struts-config.xml文件中配置上传参数,采用标签配置上传参数,
如:
。
六、ActionFrom类型转换(Converter)
1、自动转换
*boolean:
yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false
*Date类型的转换:
*如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换
*如果是java.util.Date,默认情况下struts无法转换
2、自定义类型转换
*实现converter接口,实现convert方法
publicObjectconvert(Classtype,Objectvalue),第一个参数是自定义的converter,第二个是要被转换的类型。
*将实现的conerter注册,通常情况采用servlet注册
在servlet的init方法中注册,如:
ConvertUtils.register(newUtilDateConverter(),Date.class);
*采用servlet注册需要注意标签的配置,10(也可以采用struts
plugin注册)
七、ActionForward
1、可以在struts-config.xml文件中配置全局的forward
2、重定向可以配置如下:
默认为转发redirect="false"
3、可以通过ActionForward的方法设置ActionForward的参数,如下:
ActionForwardactionForward=mapping.findForward("login");
actionForward.setRedirect(false);
这样会报错,出于安全考虑,不允许修改运行期配置参数。
以下是可行的:
ActionForwardactionForward=newActionForward();
actionForward.setPath("login");
actionForward.setRedirect(false);
八、ActionMapping
1、struts-config.xml文件中,每个标签对应一个ActionMapping实例
2、forward属性
如果只通过.do转向,可以配置如下:
3、unknown属性
如果没有效的.do,则可以通过unknown属性转到指定的页面,配置如下:
//unknow="true"指名它是一个处理unknow页面
九、l18N(Internationalization)国际化(Java)
1、Locale、ResourceBundle、MessageFormat类
//缺省Locale是由操作系统决定的,Locale是由语言和国家代码组成
LocaledefaultLocale=Locale.getDefault();
System.out.println("country="+defaultLocale.getCountry());
System.out.println("language="+defaultLocale.getLanguage());
Localelocale=newLocale("en","US");
//国际化资源文件是由baseName+locale组成,baseName是任意合法的文件名,
//资源文件在res文件下的MessagesBundle_en_US.properties文件,
//内容如:
k1=hello{0}
ResourceBundlerb=ResourceBundle.getBundle("res.MessagesBundle",currentLocale);
//System.out.println(rb.getString("k1"));
MessageFormatmf=newMessageFormat(rb.getString("k1"));
System.out.println(mf.format(newObject[]{"Tom"}));
2、使用native2ascii命令,转换成Unicode
如:
native2ascii.exeo.propertiesMessagesBundle_zh_CN.properties
一十、Struts的l18N国际化
1、流程(硬编码)
i.在struts-config.xml文件中加入:
ii.提供不同版本的国际化资源文件
iii.在jsp中采用messagekey="page.title">标签来读取国际化消息文本
2、当设置了浏览器的language时,需要关闭浏览器才有效。
因为struts默认将locale放到session中。
所以你可以通过设置session的locale来动态切换各国语言。
publicclassChangeLanguageActionextendsAction{
@Override
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
Stringlang=request.getParameter("lang");
LocalecurrentLocale=Locale.getDefault();
if("zh".equals(lang)){
currentLocale=newLocale("zh","CN");
}elseif("en".equals(lang)){
currentLocale=newLocale("en","US");
}
//request.getSession().setAttribute(Globals.LOCALE_KEY,currentLocale);
this.setLocale(request,currentLocale);
returnmapping.findForward("index");
}
}
3、消息文本的国际化处理
i.创建国际化消息ActionMessages、ActionMessage
//创建国际化消息文本,一个ActionMessage对象对应一个文本消息
ActionMessagesmessages=newActionMessages();
//user.login.success={0},登录成功
ActionMessagemessage=newActionMessage("user.login.success",username);
//如果有多个参数也可以如下:
//ActionMessagemessage=newActionMessage("user.login.success",newObject[]{username});
messages.add("loginSuccess",message);
ii.传递国际化消息,
//调用saveMessage()传递普通消息,调用saveErrors传递错误消息
this.saveMessages(request,messages);
//或this.saveErrors(request,messages);
iii.显示国际化消息
//html:
messages循环ActionMessages中的数据,id是给定一个变量,message为true表示普通//消息,false表示错误消息,默认为false。
Property表示读取指定消息
messagesid="msg"message="true"property="loginSuccess">
writename="msg"/>
messages>
//如果只显示错误信息,也可以使用
errors/>
可以在系统的资源文件中加入了,以显示不同的错误信息
#--standarderrors--
errors.header=
errors.prefix=
errors.suffix=
errors.footer=
4、JSTL的国际化处理
setLocalevalue="${header['accept-language']}"/>
setBundlebasename="res.MessageResources"/>
messagekey="user.title"/>
一十一、Struts的动态验证框