Struts2提供的类型转换:

  Struts2提供的是一个名叫StrutsTypeConverter的抽象类,这个类实际上是DefaultTypeConverter的子类。当我们继承自该抽象类

时,要求我们实现下面的两个方法:

  @Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// TODO Auto-generated method stub
return null;
} @Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}

很明显我们可以看到该抽象类将父类中的convertValue方法拆分成了两个单独的方法,来简化我们的实现工作,使程序的逻辑更加清楚。下

面是简单的实现代码:

@Override
public Object convertFromString(Map arg0, String[] values, Class toClass) { User user = new User();
String[] useValues = values[0].split(",");
String username = useValues[0];
String userpass = useValues[1];
user.setName(username);
user.setPass(userpass);
return user;
} @Override
public String convertToString(Map context, Object o) {
if (o instanceof User) { User user = (User) o; return "<" + user.getName() + "," + user.getPass() + ">";
}
return null;
}

  在这之前我们都是考虑的要转换的属性是单个的情况,那么当我们在Action中设置的属性字段是多个也就是数组的时候,又是怎么处理

的呢?比如我们在Action中将【privateUser user;】替换为【private User[] users;】时,有怎么处理呢?实现的方法也非常容易理解,

可以从参考下面的实现代码:

  (实验未成功运行)

类型转换的错误处理:

  Struts框架为类型转换提供了一个默认的conversionError拦截器,这个拦截器被注册到默认的拦截器栈中。可以查看struts-

default.xml文件,在里面找到相关内容,部分内容如下如所示:(我们要学会自己去看,去寻找事情的原因。在初学阶段Struts2

里面有两个文件我们会经常用到:

  @1:struts-default.properties,这个文件在jar包struts2-core-2.3.31中,可以通过WinRAR或其它解压缩软件解压后就

可看到。

  @2:default.properties,这个文件同样是在jar包struts2-core-2.3.31中,具体路径是struts2-core-2.3.31\org\apache

\struts2,里面定义了Struts2中的所有常量,将来我们在配置一些常量比如打开或关闭调试模式,设置是否支持动态方法调用等时

,可以作为参考)。

    

  上面我们说到了默认的拦截器conversionError,它会将拦截到的错误消息封装成表单域错误(fieldError),将其放到ActionContext

中, 我们可以在jsp页面中使用<s:fielderror/>将错误信息打印出来(需使用Strurs2的自定义标签)。当拦截器对错误信息处理后,页面

会转入“input”逻辑视图下,就是我们在struts.xml中配置的对应于Action的<resultname="INPUT">xxx.jsp<result/>。(这里建议在

编写Action类的时候继承ActionSupport类,该类中为类型转换错误处理,数据校验等实现了基本的处理工作)。这样当表单验证失败时,

会在INPUT逻辑视图下的页面中显示:信息,xxx为对应的Action中要转换的属性名称。

  除此之外,如果我们想让类型转换出错时显示:XXX类型转换错误  这样的提示信息,此时我们可以通过全局国际化资源文件来配置,下

面是简单的操作步骤:

    @1文件路径:既然是全局的资源文件,当然要把它放到src目录下,或者还可以直接放到WebContent/WEB-INF/classes下面

  (classes文件夹若没有可自己创建)。

    @2文件命名格式:xxx.properties即可,但xxx不能为struts,因为struts.properties在项目中有其固定的用途,这里不做过

  多说明。

    @3文件内容:xwork.default.invalid.fieldvalue={0}类型转换错误。

    @4加载资源文件:这里只提供其中一种方式,在struts.xml文件中的<struts>标签下加上 <constant name="struts.custom.

  i18n.resources" value="global"></constant>,struts.custom.i18n.resources可以在上面提到的文件default.properties文

  件中找到。

  经过上述步骤后,我们可以发现提示错误信息已经换成了我们规定的格式。

  在某些时候我们或许需要为Action中不同的属性字段设置不同的提示信息,此时我们只需要在该Action的资源文件中配置即可,操作

步骤如下:

    @1创建Action的局部资源文件,命名格式:ActionName.properties。ActionName是对应的Action类的文件名。

    @2文件内容:invalid.fieldvalue.属性名=提示信息。

    @3文件路径:与对应的Action在同一路径下。

  经过上述步骤后,我们已经为字段设置了不同的提示信息了。

Struts2的类型转换(下)的更多相关文章

  1. Struts2自定义类型转换,和处理类型转换错误

    Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...

  2. Struts2的类型转换

    Struts2的类型转换 类型转换的作用: HTTP请求都是字符串类型,需要把这些字符串类型转化成相应的数据类型,使得Web应用的控制组件可以使用. 1.內建的类型转换器 Struts2可以完成大多数 ...

  3. 关于Struts2的类型转换详解

    详细出处参考:http://www.jb51.net/article/35465.htm 一.类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构 ...

  4. java之struts2之类型转换

    在使用servlet开发中,表单中提交的数据到servlet后都是字符串类型,需要程序员手动进行类型转换. 但是到struts2后,基本数据类型struts2都可以转换.但是如果是自定义类型,stru ...

  5. (十二)struts2的类型转换

    所有的MVC框架,都属于表现层的解决方案,都需要负责收集用户请求参数,并将请求参数传给应用的控制器组件. 这时问题出现了,所有的请求参数都是字符串类型数据,因此MVC框架必须具备将这些字符串请求参数转 ...

  6. Struts2的类型转换机制

    Struts2的类型转换机制 在基于HITP 协胆的Web 应用中,客户端〈浏览器〉和服务器之间传输的都是字符串形式的数据,换句话说,服务器接收到的用户数据只能是字符串或字符数组, 但在服务器端的Ja ...

  7. Struts2日期类型转换

    针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...

  8. Struts2 日期类型转换

    针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...

  9. Struts2笔记——类型转换

     概述 * 从一个HTML 表单到一个Action 对象, 类型转换是从字符串到非字符串.     >HTTP 没有 “类型” 的概念. 每一项表单输入只可能是一个字符串或一个字符串数组. 在服 ...

随机推荐

  1. 《javascript个人理解,个人整理。》

    万事开头难. 本人做前端工程师,已几年,没有特别大的,已文字方式去做总结. 前段时间,早已经想好,但是迟迟没有去下笔!好在现在陆陆续续的写下去. 我知道这是一个很大的工程,但是我还是想做下去,不为别的 ...

  2. JAVA试练塔之试炼技能图

    1.计算机基础: 1.1数据机构基础: 主要学习: 1.向量,链表,栈,队列和堆,词典.熟悉 2.树,二叉搜索树.熟悉 3.图,有向图,无向图,基本概念 4.二叉搜索A,B,C类熟练,9大排序熟悉. ...

  3. Win32/MFC/COM学习推荐书籍

    以前有不少朋友问关于学习各种技术的推荐书籍的问题,这里把我觉得比较好的一些书籍列一下,希望能起到抛砖引玉的作用就好了:) Win32开发 Programming Windows by Charles ...

  4. 《剑指offer》— JavaScript(1)二维数组中的查找

    二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ** ...

  5. block循环饮用解决

    在block中使用self会引起循环引用导致无法释放. 解决: __weak typeof(self) weakSelf = self; 例如: NSLog(@"init--> val ...

  6. 智能打印SDK---官方博客

    (开源准备:开源为百度云打包开源,GIT太慢,SVN没有免费的,TFS有免费的也慢的要命) 开源地址:http://pan.baidu.com/s/1miobLoO 电子商务越来越成熟,提供的服务越来 ...

  7. Linux 压缩解压及备份命令

    linux中压缩与备份命令总结一.压缩与解压缩 1.compress [-rcv] 文件或目录 <==压缩 uncompress 文件.Z <==解压缩 -r:可以连同目录下的文件也同时进 ...

  8. 同一环境下新建Standby RAC库

    需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...

  9. Java中代理对象的使用小结

    在某些情况下,一个客户不想或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到了中介作用,这不仅仅使用代理模式,还可以实现适配器模式.装饰模式等. 代理对象内部含有对真实对象的引用,从而 ...

  10. JavaScript实现评论点赞功能

    通过分析评论功能的逻辑关系,学会如何使用JavaScript实现评论.回复.点赞等各种功能 1.学会JavaScript处理日期和时间. 2.掌握Dom操作中的添加/删除子节点方法. 3.使用setT ...