注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Lable

........................................

 
 
 

日志

 
 

9_类型转换和OGNL  

2012-01-05 11:56:52|  分类: Struts2 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、Struts2数据流向

1)数据转移和类型转换

       开发Web应用程序中最常见的一个任务是从基于字符串的HTTP请求向Java语言的不同数据类型移动和转换数据(流入),此时需要类型转换。

       数据从程序转移到视图(流出),此时需要OGNL

2)为什么需要类型转换

       在基于HTTP协议的Web应用中

·         客户端请求的内容都以文本编码方式传输到服务器端

·         服务器端的编程语言却有着丰富的数据类型

3Servlet中,类型转换工作由开发者自己完成。

4Struts2提供了多种内置类型转换器,自动对客户端传来的数据进行类型转换,另外开发者可以开发自定义类型转换器。

二、内置类型转换器

内置类型转换器

   

String

intlongdoublebooleanString类型的数组或者java.util.Date类型转换为字符串

boolean/Boolean

在字符串和布尔值之间进行转换

char/Character

在字符串和字符之间进行转换

int/Integer< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

float/Float

long/Long

double/Double

在字符串和数值型数据之间进行转换

date

在字符串和日期类型之间进行转换。具体输入输出格式与当前的Locale相关

数组和集合

在字符串数组和数组对象、集合对象间进行转换

三、创建自定义类型转换器

    步骤:

       继承StrutsTypeConverter抽象类,会继承其中的两个方法

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

       public String convertToString(Map context,Object object);

       创建关联属性文件

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

       src目录下创建 xwork-conversion.properties

       内容为:转换类全名=类型转换器全名

       e.g.  java.util.Date = com.converter.DateConverter

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

       需要在特定类的相同目录下创建一个名为 ClassName-conversion.properties

       内容为:特定类的属性名=类型转换器类全名

四、处理类型转换错误

    :这个处理类型转换错误是指在服务器端进行判断

       前提条件

       启动StrutsConversionErrorInterceptor拦截器,此拦截器已经包含在defaultStack拦截器栈中。

       Action要继承ActionSupport类,其实是要实现ValidationAware接口

       配置input结果映射

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

       Struts2表单标签内嵌了输出错误信息功能

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

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

       修改struts.xml文件,添加<constant name=struts.custom.i18n.resources” value=message/>

       src目录下创建资源文件message.properties,并添加文本xwork.default.invalid.fieldvalue=字段“{0}”的值无效

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

       修改struts.xml文件,添加<constant name=struts.custom.i18n.resources” value=message/>

       Action范围的资源文件中添加i18n消息键invalid.fieldvalue.xxx,其中xxx是字段名称;(注:Action范围是指名称与Action名字相同的资源文件

       e.g: RegisterAction.java所在的目录下创建RegisterAction.properties文件

增加内容:invalid.fieldvalue.birthday=生日类型转换错误

OGNLObject Graph Navigation Language

  1 OGNL称为对象图导航语言。所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象;是一个开源项目,工作在视图层,用来简化数据的访问操作,OGNL访问比EL的功能更加强大。

2OGNLStruts2中的作用

       表达式语言

       将表单或Struts2标签与特定的java数据绑定起来,用来将数据移入、移出框架

       类型转换

       数据进入和流出框架,页面中数据的字符串版本和java数据类型之间都发生转换

  3)访问

    AOGNL上下文中可以包含多少个对象,如果访问根对象,可直接书写对象的属性,而要使用其它对象必须使用“#key前提来访问

B、在ActionContext中,除了值栈这个根对象外,还放置了其它多个对象,包括但不限于applicationsessionrequestparametersattrmap对象

    C、如果对对象的类型使用了%{…}语法,则语法会被忽略,而直接把内容当作OGNL表达式来求解。例如<s:property value=%{#myurl}”/><s:property value=#myurl”/>的作用相同。如果分不清属性的值的类型是不是字符串类型的,则可以直接加上${…}

  4)常用的标签:

<s:debug/>:查看值栈的数据

<s:iterator/></s:iterator>:用于将ListMapArrayList等集合进行循环遍历

<s:if></s:if>:用于在页面中判断指定数据<s:else>

<s:property></s:property>:当action返回到指定页面时,可以通过该标签显示action中的属性的信息

<s:set></s:set>:用于将某个值放入指定的范围内

  评论这张
 
阅读(88)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017