OGNL

Struts2 | 2018-05-14 16:35:55 | 阅读 253 次 | 评论(0)

什么是OGNL?

        >>Object Graph Navigation Language

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

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

OGNL在Struts2中做的两件事情

        >>表达式语言

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

         >>类型转换

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

创建自定义类型转换器        

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

        基本步骤:

                >>继承StrutsTypeConverter抽象类

                          >>继承org.apache.struts2.util.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){

                        tyr{retrun df.parse(dateStr);}catch(ParseException e){continue;}

                     }

                    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

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

                        例如:    java.util.Date=cn.ssh.ch.converter.DateConberter

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

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

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

                        例如:    在需要转换类属性的同包中创建 timeDate=cn.ssh.ch.converter.DateConberter


处理类型转换错误

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

        >>启动StrutsConversionErrorInterceptor拦截器

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

        >>Action要继承ActionSupport类

            >>实质是实现ValidationAware接口

        >>配置input结果映射

        >>页面使用Struts 2表单标签或<s:fielderror>标签

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

            >>普通HTML标签需使用<s:fielderror>标签输出转换错误


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

        >>思路

                >>修改xwork.default.invalid.fieldvalue键的值

        >>实现

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

                <constant name="struts.custom.i18n.resources"     value="message"/>

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

                xwork.default.invalid.fieldvalue=字段"{0}"的值无效


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

        >>思路

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

        >>实现

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

                invalid.fieldvalue.birthday=生日转换错误




文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论