我今天学习了struts的一些特有的功能:
struts的同步令牌机制:在struts中控制表单的重复提交
在Action的方法里面:
this.saveToken(request);
boolean flag=this.isTokenValid(request);
if(flag){
//应该从session中清除session.removeAttribute(key)
this.resetToken(request);
//插入数据库的方法
customerService.saveCustomer(c);
}else{
System.out.println("表单重复提交了");
}
struts中的转化器:
Struts可以自动进行类型间的转换,将String类型转换为Integer类型 或java.sql.Date,
但是这种转换并不是万能的,譬如,它就不能将String转换为java.util.Date类型,
我们可以自己定义一个转换器类实现我们的需求:将符合日期类型的字符串转化为java.uil.date类型
自己写一个工具类:
必须实现Converter接口,重写接口的方法,
convert(Class clazz, Object value) //clazz表示要转化为的数据类型,value表示要转化为该类型的值,代码如下:public Object convert(Class clazz, Object value) {
if(value==null){
return null;
}else{
if(clazz == java.util.Date.class) {
if(value instanceof String) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse((String)value);
} catch (ParseException e) {
throw new RuntimeException("您输入的数据格式不对");
}
}else{
throw new RuntimeException("您输入的数据不是String类型");
}
}else{
throw new RuntimeException("您输入的数据类型不是java.util.Date类型");
注册struts中的转化器:
使用自己定义的转换器的时候,还需要注册转换器,
一定要在使用之前去注册转化器,我们可以在Action里,用一个静态代码块来注册转换器:
代码如下:
static{
* register(new String2DateConvert(), java.util.Date.class);
* 第一个参数 是转化器的实例
* 第二个参数要转化的数据类型(本类中用的String-java.util.Date)
ConvertUtils.register(new String2DateConvert(), java.util.Date.class);}
当使用BeanUtils.copyProperties进行属性间的复制的时候,就会自动查找对应的转换器,并调用该转换器,
使用struts内置的转换器时,不需要去注册了,因为Struts将常用的转换器,已经注册好了
Struts应用国际化:
软件的本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯。
软件的国际化:软件开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。
Struts框架通过使用<bean:messgae>标记,以及使用java.util数据包中定义的Locale和ResourceBundle类来支持国际化。java.text.MessageFormat类定义的技术可以支持消息的格式。利用此功能,开发人员无须了解这些细节就可以进行国际化处理并设置消息的格式。
资源文件和资源包
要用Struts实现国际化和本地化,首先要定义资源文件的名称,这个文件会包含用默认语言编写的会在程序中出现的所有消息。这些消息以”键-值“对的形式存储,如下:
error.validation.localtion = The entered location is invalid
当对一个应用程序进行国际化处理时,所要用的各种语言版本的”标签“信息应该存放在不同的属性文件中,每一个这样的文件对应一种语言版本。所有属性文件合在一起称为资源包(Resource Bundle)。
属性文件的命名格式可分为以下两种:
a)文件名前缀.properties
b)文件名前缀_语言种类.properties
文件名后缀必须是properties,前缀可自由书写,其中语言种类字段必须是有效的ISO语言代码。
文件名前缀.properties默认的形式,当其他属性文件找不到时,会默认的寻找此属性文件。