struts2.1.6教程十、类型转换
建立struts2conversion项目,并搭建好struts2的基本开发环境
1.基于Action的直接属性转换
建立t.jsp页面,内容如下:
<s:form action="phone" method="post">
<s:textfield name="thePhone" label="电话"/>
<s:submit value="提交"/>
<s:reset value="重置"/>
</s:form>
此action对应的配置如下:
<action name="phone" class="com.asm.action.PhoneAction">
<result name="success">tSuc.jsp</result>
<result name="input">/t.jsp</result>
</action>
对应的PhoneAction类的代码如下:
package com.asm.action;
public class PhoneAction extends ActionSupport {
private Telephone thePhone;
public String execute() throws Exception {
return SUCCESS;
}
...省略thePhone的get/set方法
}
说明,如果直接这样执行将会出错,因为前台t.jsp传的String默认是不能被转成这里的Phone对象,所以我们必须使用类型转换,而且我们配置了input result就是告诉我们如果类型转换失败,将会停在t.jsp页面,而且会报错。下面接着看怎么类型转换。在这里我们要把010-123456这样的电话换成:区号:010 电话:123456这样的形式时。具体的操作步骤如下:
创建类型转换类TelephoneConversion,代码如下:
package com.asm.conversion;
public class TelephoneConversion extends StrutsTypeConverter {
public Object convertFromString(Map context, String[] values, Class toClass) {
System.out.println("执行字串到Telephone对象的转换");
Telephone tp=new Telephone();
String [] tel=values[0].split("-");
tp.setSecNum(tel[0]);
tp.setPhone(tel[1]);
return tp;
} public String convertToString(Map context, Object obj) {
System.out.println("执行Telephone对象到字串的转换");
Telephone tp=(Telephone) obj;
return "区号:"+tp.getSecNum()+"\t电话:"+tp.getPhone();
}
}
说明:类型转换类必须实现TypeConverter接口,而这里的StrutsTypeConverter类便是TypeConverter接口实现类DefaultTypeConverter的子类。此类中有两个方法,一个方法实现把字串转成其它对象,一个方法实现把其它对象转成字串。在convertFromString方法中,我们实现把客户端传递的字串转成Telephone对象,这样就能让PhoneAction的setThePhone方法得以正确执行。而后面的方法是为了我们要取值时进行的处理,比如在tSuc.jsp中我们要得到此值,需要把Telephone对象转换字串。其实如果没有convertToString方法,只要我们重写Telephone的toString方法也能达到目的。
写完类类型转换类后,我们还应告知struts2,所以我们还需建立一个properties文件。我们在PhoneAction的同包下建立PhoneAction-conversion.properties文件,它的主要代码如下:
thePhone=com.asm.conversion.TelephoneConversion
说明:这句话的意思是说我们要把PhoneAction(通过properties文件名可以知道要转换的是此Action)下的thePhone使用TelephoneConversion进行转换。其实我们也可以配置全局的properties文件说明,比如我们在src目录下建立xwork-conversion.properties文件(名字固定),它的内容如下:
com.asm.vo.Telephone=com.asm.conversion.TelephoneConversion
说明:它的意思是只要遇到Telephone对象,就要用后面的转换器来实行转换。
2.基于Action的间接属性vo转换
t2.jsp主要内容如下:
<s:form action="up" method="post">
<s:textfield name="user.thePhone" label="电话"/>
<s:submit value="提交"/>
<s:reset value="重置"/>
</s:form>
我们建立UserPhoneAction类,它的主要代码如下:
package com.asm.action;
public class UserPhoneAction extends ActionSupport {
private User user;
public String execute() throws Exception {
return SUCCESS;
}
...省略user的get/set方法
}
User类的代码如下:
package com.asm.vo;
public class User {
private Telephone thePhone;
...省略thePhone的get/set方法。
}
说明:通过这两个类及t2.jsp页面,我们知道,前台传递的thePhone对象不时直接传递,而是采用了vo模式,所以当我们配置类型转换时,要特别注意。因为前面我们使用了全局的类型转换,所以这里不会出错,但是当我们去掉前面的全局转换时,配置类型转换的properties文件就应在User类对应的包下配置User-conversion.properties文件,它的主要内容如下:
thePhone=com.asm.conversion.TelephoneConversion
说明及总结:类型转换的配置文件如果不采用全局的配置时,我们就应以要转换的类型的直接持有类为基准:比如,这里的thePhone的直接持有类为User对象,所以我们就应以User为基准写properties文件名。
struts2.1.6教程十、类型转换的更多相关文章
- struts2.1.6教程十二、总结
本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例. 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官 ...
- struts2官方 中文教程 系列十四:主题Theme
介绍 当您使用一个Struts 2标签时,例如 <s:select ..../> 在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...
- struts2官方 中文教程 系列十二:控制标签
介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...
- struts2官方 中文教程 系列十:Form标签
介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 无废话ExtJs 入门教程十九[API的使用]
无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...
- 无废话ExtJs 入门教程十六[页面布局:Layout]
无废话ExtJs 入门教程十六[页面布局:Layout] extjs技术交流,欢迎加群(201926085) 首先解释什么是布局: 来自百度词典的官方解释:◎ 布局 bùjú: [distributi ...
- 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]
无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
随机推荐
- 使用IO流实现音频的剪切和拼接
需求: 使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首新的音频文件 思路(以两首歌为例): 第一首歌有一个输入流对象bis1.第二首歌有一个输入流对象bis2,他们公用一 ...
- R语言生成随机数
1.概述 作为一种语言进行统计分析,R有一个随机数生成各种统计分布功能的综合性图书馆.R语言可以针对不同的分布,生成该分布下的随机数.其中,有许多常用的个分布可以直接调用.本文简单介绍生成常用分布随机 ...
- Apache设置404页面
使用版本:Apache 2.2 1.添加404页面 在所配置网站的根目录添加编辑好的 404.html (页面名字无所谓 比如也可以叫missing.html) 如C:\Program Files\A ...
- virtual box ubuntu 与Windows共享文件夹
由于懒得去截图了,直接抛链接.参考链接:http://www.cnblogs.com/lidabo/p/5317024.html 简介概括:首先安装增强功能,接着在virtual box的seting ...
- Unity 检测物体是否在相机视野范围内
需求: 类似NPC血条,当NPC处于摄像机视野内,血条绘制,且一直保持在NPC头顶. 开始: 网上查找资料,然后编写代码: public RectTransform rectBloodPos; voi ...
- php流程管理
流程控制即某个人发起一个流程,通过一层一层审核,通过后,完成整个流程,若有一层审核未通过,中断整个流程.即结束! 比如请假流程: 某一员工发起一个请假流程,那么这个流程的节点人员即他的上级,上上级,上 ...
- Javascript中变量作用域
<script type="text/javascript"> var a = 10; var Bar = (function () { console.log(a); ...
- VS2015如何新建C++或者C语言版的lib文件
当我们不想公开我们的代码的时候,可以把我们的代码封装成静态数据连接库,即lib文件.下面介绍下如何生成lib文件. 以VS2015为例,一种是C++版的lib文件,一种是C语言版的lib文件. 一.按 ...
- OC中@class的使用
作用: 可以简单地引用一个类简单使用@class Dog; //类的引入 #import "Dog.h"仅仅是告诉编译器:Dog是一个类;并不会包含Dog这个类的所有内容 具体使用 ...
- spring security 配置多个AuthenticationProvider
前言 发现很少关于spring security的文章,基本都是入门级的,配个UserServiceDetails或者配个路由控制就完事了,而且很多还是xml配置,国内通病...so,本文里的配置都是 ...