OGNL

什么是OGNL?

>>Object Graph Navigation Language

>>开源项目,取代页面中Java脚本,简化数据访问

>>和EL同属于表达式语言,但功能更为强大

OGNL在Struts2中做的两件事情

>>表达式语言

>>将表单和Struts2标签与特定的Java数据绑定起来,用来将数据移入、移除框架;

>>类型转换

>>数据进入和流出框架,在页面数据的字符串类型和Java数据类型之间进行转换;

创建自定义类型转换器

当默认类型转换器满足不了使用的时候,创建自定义类型转换器就很必要了。

基本步骤:

>>继承StrutsTypeConverter抽象类

#将一个或多个字符串值转换为指定的类型

public Object convertFromString(Map context,String[] val,Class to Type)

#将指定对象转化为字符串

public String convertToString(Map context,Object object)

例如:

public class DateConverter extends StrutsTypeConverter{

private final DateFormat[] dfs={

new SimpleDateFormat("yyyy年MM月dd日"),

new SimpleDateFormat("yyyy.MM.dd"),

new SimpleDateFormat("yyyy/MM/dd"),

new SimpleDateFormat("yyyyMMdd"),

new SimpleDateFormat("yyyy-MM-dd"),

} ;

//存入时调用

public Object convertFromString(Map context,String[] values,Class toType){

String dataStr=value[0];

for(DateFormat df: dfs){

tyrcatch(ParseException e)

}

throw new TypeConversionException(); //异常处理实现消息输出

}

//取出是调用

public String conbertToString(Map context, Object object){

Date date =(Date)object;

retrun new SimpleDateFormat("yyyy-MM-dd").formate(date);

}

}

另外,还需要配置自定义类型转换器,分两种情况

>>应用于全局范围的类型转换器

>>在src目录创建xwork-conversion.properties

转换类全名=类型转换器类全名

>>应用于特定类的类型转换器

>>在特定类的相同目录下创建一个名为ClassName-conversion.properties的属性文件

特定类的属性名=类型转换器类全名

处理类型转换错误

向用户输出类型转换错误的前提条件

>>启动StrutsConversionErrorInterceptor拦截器

>>拦截器已经包含在defaultStack拦截器栈中

>>Action要继承ActionSupport类

>>实质是实现ValidationAware接口

>>配置input结果映射

>>页面使用Struts 2表单标签或标签

>>Struts 2表单标签内嵌了输出错误信息功能

>>普通HTML标签需使用标签输出转换错误

修改所有类型的转换错误信息

>>思路

>>实现

>>在struts.xml中指定资源文件的基名

>>在src目录下创建资源文件message.properties并修改键值

定制特定字段的类型转换错误信息

>>思路

>>在Action范围的资源文件中添加I18N消息键invalid.fieldvalue.属性

>>实现

>>在Action包下创建RegisterAction.properties,指定键值

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180605A17RI100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券