类型转换

1. 什么是类型转换

刚才学习了封装请求参数,把表单数据封装到Action(模型)的属性中。表单中的数据都是String类型,但Action(模型)的属性不一定什么类型。
将来我们还需要数据的回显,即把Action的属性值显示到表单中。把Actoin的属性显示在表单中。

类型转换是双向的

String[] --> Object,从表单到Action
Object --> String,从Action到表单

默认情况下,Struts会帮我们转换如下类型:
1. Date
2. 基本类型:int、float ....
3. String类型
4. 基本类型对应包装类型:Integer、Double....

<input type="checkbox" name="hobby" value="上网"/>
<input type="checkbox" name="hobby" value="看书"/>
<input type="checkbox" name="hobby" value="再上网"/>
<input type="checkbox" name="hobby" value="还是看书"/>
class MyAction {
private int age;
private Date birthday;
}

=====================

自定义类型转换

1. 目标

在表单给出如下数据:
张三,23,男

把这个字符串转换成Person,封装到Action的一个类型为Person的属性中。

2. 自定义类型转换
  当Struts自动类型转换失败时,它会使用最原始的类型完成封装,即使用String[]类型。
  例如要把字符串数组转换成Person类型时,自动类型转换会失败,这时Struts会去寻找setPerson(String[])方法。
  如果找不到这个方法,会抛出NoSuchMethodException异常,说明类型转换失败。

1). 编写类型转换器
2). 配置自定义的类型转换器类。

3. 编写类型转换器
1). 实现com.opensymphony.xwork2.conversion.TypeConverter(不方便)
2). 继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter(不方便)
3). 继承org.apache.struts2.util.StrutsTypeConverter(就用它)

SturtsTypeConverter
* Object convertFromString(Map context, String[] values, Class toClass):String --> Object,从表单到Action
* String convertToString(Map context, Object o):Object --> String, 从Action到表单

4. 配置自定义类型转换器
局部部署:当前转换器只对当前Action的指定属性有效

1) 配置文件的位置:Action同包下,即PersonAction同包下
2) 配置文件的名称:Action名称-conversion.properties,PersonAction-conversion.properties,
3) 配置文件的内容:要处理的属性名称=类型转换器的全名,即:person=cn.itcast.converter.PersonConverter

全局部署:对某一类型指定类型转换器,例如Person类型都使用同一类型转换器

1) 配置文件的位置:src下
2) 配置文件的名称:xwork-conversion.properties
3) 配置文件的内容:要处理的类型=类型转换器名称,即:cn.itcast.action.Person=cn.itcastion.converter.PersonConverter

5. 类型转换错误

HTTP Status 404 - No result defined for action cn.itcast.action.PersonAction and result input
说明:已经找到了类型转换器,但类型转换失败。这时struts要求跳转到input结果,但我们没有为当前Action配置input结果。

在input结果页面中给出<s:fielderror/>来显示错误信息。
但错误信息是英文的,这需要使用国际化。

国际化key:invalid.fieldvalue.当前字段名,即:invalid.fieldvalue.person
处理这一问题:
1. 在当前Action同包下创建资源文件,名称为:Action类名.properties

6. 原理
params:完成封装请求数据,它会做类型转换工作。
converterError:如果出现类型转换错误,会向当前Action中添加fielderror。
workflow:查看当前Action中是否存在fielderror或actionerror,只要存在错误,拦截请求,转发到input结果,不会在执行Action的请求处理方法。当然,如果没有错误,放行!

struts2框架之类型转换(参考第二天学习笔记)的更多相关文章

  1. struts2框架之拦截器(参考第二天学习笔记)

    拦截器 1. 什么是拦截器 1). 与JavaWeb中的Filter比较相似. 2). 拦截器只能拦截Action!!! 2. Struts中定义了很多拦截器,其中defaultStack中的拦截器会 ...

  2. struts2框架之国际化(参考第二天学习笔记)

    国际化 1. 回忆之前的国际化 1). 资源包(key=字符串) > 命名:基本名称+local部分.properties,res_zh.properties,res_zh_CN.propert ...

  3. struts2框架之请求参数(参考第二天学习笔记)

    获取请求参数 请求参数:表单中的数据,或者是超链接中的数据. 1. 得到request,再通过request来获取.2. 属性驱动 在Action中提供与表单字段名称相同的属性即可. 而一个名为par ...

  4. struts2框架之输入校验(参考第二天学习笔记)

    输入校验: 1. 分类 客户端校验:javascript,它是用户体验而已,可以绕开. 服务器端校验 * 代码校验 1). 要求Action必须继承ActionSupport 2). 重写Action ...

  5. 《Linux内核分析》第二周学习笔记

    <Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  6. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  7. 精通ASP.Net MVC 3 框架(第三版)学习笔记

    精通ASP.Net MVC 3 框架(第三版)学习笔记 代码才是王道. http://pan.baidu.com/s/1pJyL1cn

  8. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  9. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

随机推荐

  1. MVC项目报错 ”基础提供程序在 Open 上失败”

    问题: 今天将一个.net mvc项目拷贝到另一台电脑上,重新部署的时候,出现以下异常信息: “System.Data.Entity.Core.EntityCommandExecutionExcept ...

  2. Windows netstat 查看端口、进程占用 查看进程路径

    1.查看端口.进程占用 运行->进入cmd->netstat -ano 2.查看进程路径 运行->WMIC->process 3.查看进程PID和占用内存情况 运行->进 ...

  3. mysql根据出生日期查询年龄

    如题,根据出生日期查找计算出年龄,网上找了一大堆,数据库可以用,但是集成到mybatis它不答应了,报错.具体是大于号,小于号的问题.要我解决那个错误吗?不存在的.换一种方式就好了.而且sql语句一大 ...

  4. Web前端框架与移动应用开发第七章:二

    3.练习3:抽奖大转盘 注意事项:需要使用Zepto.js,区别于zepto.min.js 实现效果:转盘转动抽奖 html <!DOCTYPE html><html>< ...

  5. Gson入门教程【原】

    gson一个jar包就能纵横天下,不像Json-lib.jar依赖其它jar包. 点击右边图片下载jar包       或以下链接 http://central.maven.org/maven2/co ...

  6. python爬虫慕课基础2

    实战演练:爬取百度百科1000个页面的数据 对于新手来说,可以把spider_main.py代码中的try和except去掉,运行报错就会在控制台出现,根据错误去调试自己的程序 发现以下错误: req ...

  7. HDU 1031(服装打分 **)

    题意是有 n 个人要对 m 件服装打分,按总分从高到低排序,再将总分排在前 k 名的服装按编号的从高到低输出,结构体排序. 代码如下: #include <bits/stdc++.h> u ...

  8. 分布式配置 SSH 免密登陆

    原地址忘记了,暂且记下 一.准备工作 1) 用客户端工具(ssh client或者putty)连接到linux服务器.在root用户下输入命令 vi /etc/hosts,用vi编辑hosts文件,如 ...

  9. 指定so动态链接库连接器

    在学习x86_64汇编时, 发现一旦使用glibc库函数, 如printf时, 一般是需要使用为ld传递命令行参数-lc来动态连接libc.so的, 但是, 生成的可执行文件却无法运行: 气煞我也! ...

  10. ASP.NET Web API 2 消息处理管道

    Ø  前言 ASP.NET 的应用程序都会有自己的消息处理管道和生命周期,比如:ASP.NET Web 应用程序(Web Form).ASP.NET MVC,还有本文将讨论的 ASP.NET Web ...