您的位置:首页 > 编程语言 > Java开发

黑马程序员——struts2学习笔记四(类型转换)

2015-08-06 22:10 555 查看
[b]-----------android培训java培训、java学习型技术博客、期待与您交流!------------
[/b]

struts2中类型转换

1.struts2获取前端表单数据的方式

       (1)要求请求处理的action类中要声明与前端表单信息一致的属性,并且给出set/get方法;

       (2)当请求到达action时,struts2(有一个处理此操作的拦截器)会通过反射的机制将前台提交过来的表单信息与action类相应的属性进行封装;

       (3)由于前台提交上来的信息都是String类型的,struts2可以根据action类中声明的类型的将String进行相应的转换,但不能转换所有类型,就这要求开发人员自定义类型转器,用于处理相应的类型转化;

2.自定义类型转化器

      (1)实现TyeConverter接口,或继承此接口的实现类,

      (2)在实际开发中一般通过继承DefaultTypeConverter,重写相应的方法convertValue(Object object,Class class1)自定义转化的过程来实现类型转换的,

      参数Object:其实是前台传过来的字符串(要转换的值);

      参数class1:是需要转换得到的类型(与action中定义的属性一致);

(3)自定义好的转换器需要注册,配置后再能使用,框架提供两种方式:

      注册方式一(基于字段|局部的):

      在action的同级目录下新建一个配置文件xxxAction-conversion.properties(名称为规范名:action类名+conversion.properties)

      文件内配置:action属性=转换器全类名

      注册方式二(基于类|全局的):

      在src目录下创建xwork-conversion.properties(固定写法,底层已经写死),文件中配置:action属性=转换器全类名

      需要注意:自定义的类型转换器中,如果不手动抛出异常,框架只捕获异常,不抛出异常,所以框架就会认为类型转换成功。因此此处的异常处理需要需要手动抛出(throws new ……)

(4)类型转换异常处理:

      当转换器抛出异常时,后台可以打印出异常的信息,但前台需要加上一个标签才能显示相应的异常信息<s:fielderrorfieldName="【此处写可能出现错误的属性名】"/>(使用此标签需要先导入标签:<%@ tagliburi="/struts-tags" prefix="s"%>);

      (4.1)按以上操作得到的异常提示信息英文的,是来自框架底层提供的一个配置文件(xwork-messages.properties)的配置(如下),开发人员可以根据需要自定义资源文件(xxx.properties),将其复盖,达到显示中文提示的效果;

***************************************************************

xwork.error.action.execution=Errorduring Action invocation

xwork.exception.missing-action=Thereis no Action mapped for action name {0}.

xwork.exception.missing-package-action=Thereis no Action mapped for namespace {0} and action name {1}.

xwork.default.invalid.fieldvalue=Invalidfield value for field "{0}".

***************************************************************

      (4.2)自定义资源文件方式为:在与action同级目录下新建一个资源文件,名称自定义,将xwork.default.invalid.fieldvalue=Invalidfield value for field "{0}".

=号后面的信息改为中文提示,但自定义的资源文件框架是不能自动识别的,需要在struts-xml中将引入(通过常量的形式配置),具体如下:

***************************************************************

    <constant
name="struts.custom.i18n.resources"
value="【资源文件所在目录:格式如:xx.yy.xx(注意文件后缀名不用带上)】"></constant>

***************************************************************

      (4.3)以上错误信息配置不能根据错误字段提示(即根据属性提示),要达到这个效果需要在异常提示中的配置改为:invalid.fieldvalue.字段(action中的属性)=提示信息。

3.action类中含javabean封装页面数据的方法:

        在action类增加一个javabean字段(如:User user),要有set/get方法;

       页面表单中的name值应按”javabean.属性名” 写,如user.name;框架中相应的拦截器会将数据自动封闭到javabean中,后台通过javabean的实例可以得到封装的数据;

4.类型转换品与集合配合使用

       在action类增加一个Collection字段(如:Collection<Edu>edus),页面表单中的name属性值应按”字段[?].属性名”写,如edus[0].name;框架中相应的拦截器会将数据自动封闭到Collection中,后台通过Collection的实例可以得到封装的数据;

5.ServletActionContext工具类

       ServletActionContext作为Servlet与Action的桥梁,它对原生Servlet相关的类进行了封装(Session需要通过这种式得到:ServletActionContext.getContext().getSession();),可以通过这个类的方法得到Servlet相关的类。

       获取原生Servlet相关的类方法二:让Action类实现ServletRequestAware,ServletResponseAware, ServletContextAware, SessionAware四个接口(需要声明Servlet相关的局部变量),重写四个接口对应的四个方法即可。

-----------------------------------------------------------2015年8月6日笔记-----------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: