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种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
随机推荐
- 使用cocapods报错 [!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes
从github上下载的工程大部分都使用了cocapods,在install的时候可能会报错. 报错原因: 1.不要使用文本编辑去编辑Podfile文件,使用Xcode编辑,或者使用终端敲命令去编辑. ...
- lumen 中的 .env 配置文件简介和适用场景
lumen 是 laravel 的衍生品,核心功能的使用和 laravel 都是一致的,但配置文件这一方面,lumen 在 laravel 的基础上增加了更简便的配置方式: lumen 采用了 Dot ...
- input是否checked与使用jquery的attr或prop方法无关
最近在项目中有这样一个需求,用户在下单时可以选择优惠券,也可取消选择,并且可以多次选择,取消. 这是一个典型的input标签checked功能,博主使用radio元素实现此需求,但是优惠券只能选中,不 ...
- Centos7上安装Kubernetes集群部署docker
一.安装前准备1.操作系统详情需要三台主机,都最小化安装 centos7.3,并update到最新 [root@master ~]# (Core) 角色 主机名 IPMaster master 192 ...
- Linux 初设root 密码
设置root用户的密码,输入命令:sudo passwd root 然后输入root密码,最后确认,OK,设置完成. 输入:su 提示输入密码,就能够以root身份登录啦.
- EF的DbSet属性的Where查询,注意事项
#1 Func<T,bool>与 Expression<Func<T,bool>>的区别 Func<T,bool>本身就是一个委托(delegate), ...
- css3 felx布局
一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. [css] .box ...
- office web apps 部署-搭建域控服务器
开始第一条先说注意事项:我所配置的环境是用了三台2012server虚拟机,三台虚拟机必须要加下域控,而且登录操作的时候必须以域账号登录,否则测试不通过!在笔记本上搭建了两个虚拟机(window se ...
- 点击滚动图片JS部分代码以及css设置注意事项
下面js代码可以实现8张图片点击左右按钮后切换的过渡动画效果 var pslul11=document.getElementById('pslul11')var pslspan1=document.g ...
- LESS的一点自己的理解(1)
写前端的时间也不短了,Less也用过几次,都是现学现用,没有仔细的梳理过,今天就有条理的梳理下.参考文章是一篇不错的哦.下面会附上链接的,废话不多说,开始正题. 首先应该说下什么是Less,Less是 ...