Struts2国际化和文件上传

来源:互联网 发布:centos下lamp环境搭建 编辑:程序博客网 时间:2024/05/01 11:32
国际化(i18n)

国际化简称i18n,其来源是英文单词 internationalization的首末字符i 和n。18为中间的字符数。

随着全球经济的一体化,软件开发者应该开发出支持多国语言、国际化的Web应用。对于Web应用来说,同样的页面在不同的语言环境下需要显示不同的效果。

国际化文件的命名规则:
    1、基本名.properties    如:message.properties
    2、基本名_语言编码_国家编码.properties    如:message_zh_CN.properties, message_en_US.properties
    其中语言编码和国家编码是固定的,可以在JDK中Locale类的常量中找到。

对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:
native2ascii   源文件.properties  目标文件.properties

Java中已经实现了国际化功能,struts2中只是对该功能进行了整合,以方便我们的使用。


Struts2中使用到国际化的地方有:
1、jsp页面的国际化;
2、Action信息国际化;
3、转换错误信息的国际化;
4、校验错误信息的国际化;

Struts2国际化文件分类:
1、全局范围国际化文件
2、包范围国际化文件
3、Action类范围国际化文件

全局范围国际化文件

在struts.xml中通过struts.custom.i18n.resources常量把资源文件定义为全局资源文件,如下:
    <constant name="struts.custom.i18n.resources" value="message" />
    其中message为资源文件的基本名
 
 在src文件下建立message_zh_CN.properties文件
    username=用户名




包范围国际化文件

在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。


在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。



Action类范围国际化文件

当一些显示数据只会被某个action使用,这时候我们可以把这些显示数据定义在只能被该action访问的Action范围资源文件中。

为某个action指定资源文件,方法如下:
    在Action类所在的路径,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。

如果三篇文件都存在,执行顺序:
    当查找指定key的消息时,系统会先从最小的Action类范围国际化文件中寻找;
     如果没有找到对应的key,然后沿着当前包往上查找基本名为package 的资源文件,一直找到最顶层包;
     如果还没有找到对应的key,最后会从常量struts.custom.i18n.resources指定的全局资源文件中寻找。

转换错误信息的国际化


在全局国际化文件中添加:
     xwork.default.invalid.fieldvalue={0}错误信息

在Action范围内国际化文件中添加:
    invalid.fieldvalue.字段名=专用错误信息



校验错误信息的国际化

 <field name="username">
        <field-validator type="requiredstring">
                  <message key="error.required"></message>
             </field-validator>
        <field-validator type="stringlength">
                <param name="minLength">5</param>
                <param name="maxLength">8</param>
                <message key="error.length></message>
    </field-validator>

如果要传参—国际化文件中书写:

error.length=The length of ${getText(fieldName)} should be in ${minLength} and ${maxLength} charactors! 

文件上传

1、确认lib包中有: commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar

2、确认页面form表单上的提交方式为POST,enctype属性的值为“multipart/form-data”

3、在Action类中添加以下属性,
public class HelloWorldAction{
    private File uploadImage;//得到上传的文件
      private String uploadImageContentType;//得到文件的类型
      private String uploadImageFileName;//得到文件的名称
    
    public String execute(){
        //基本I/O操作步骤即可
    }
}



0 0