Struts的类型转换
struts中jsp提交的数据,struts会自动转换为action中的属性类型;
对于基本的数据类型以及日期类型会自动转换;
就像前面那一篇博客的代码封装一样,会把字符串类型传过来的数据转化为相应的数据;
现在又有一种情况,日期的类型有很多种形式,我们上次输入的是这种形式:2016-12-13,会正常的显示,并且传给后台,但是日期的格式很多种,而一旦我们改成这样20161213,就会出现问题了,如下:(页面还是会相应的跳转的)
那么,现在问题来了,就需要自定义类型格式的转换;
对于基本数据类型以及yyyy-MM-dd日期类型的日期格式会自动转换;
而其他的格式的转换,需要自定义类型转换器,有两种类型:局部类型转换器和全局类型转换器。
Struts转换器API
—TypeConverter 转换器接口
—DefaultTypeConverter 默认类型的转换器类(实现复杂,一般不去用)
—StrutsTypeConverter 用户编写的转换器接口,继承此类即可
转换器开发步骤
局部转换器
1、写转换器类(一般在工具包写去写)
package com.type; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; /** * 自定义类型转换器 * @author Administrator *要求:格式支持yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日 */ public class MyConverter extends StrutsTypeConverter { //先定义格式 DateFormat df[]={ new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy年MM月dd") }; /** * 把struts转换为指定的类型 [现在 的目标是把string转化为Date] * @param arg0 当前的上下文环境 * @param arg1 jsp表单提交的字符串的值 * @param arg2 要转换的目标类型 */ @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat("yyMMdd"); System.out.println("hhh"); //判断 if (arg1 == null || arg1.length==0) { return null; } //判断类型必须为Date if (Date.class !=arg2) { return null; } //迭代,转换失败,就继续下一个格式的转换,转换成功直接返回 for (int i = 0; i < df.length; i++) { try { return df[i].parse(arg1[0]); } catch (ParseException e) { continue; } } return null; } @Override public String convertToString(Map arg0, Object arg1) { // TODO Auto-generated method stub return null; } }
2、配置转换器类(告诉struts应用自己的转换器,必须在类的同一个包下写)
在同包的action目录下,新建一个properties文件,
命名规则是:ActionClassName-conversion.properties;
user.birth=com.type.MyConverter
项目截图
总结:这个局部的转换器不能给不其它action使用
这个时候要用全局的转换器
需要写一个转换器,给所有的action用!
配置全局类型转换器
-->src/xwork-conversion.properties
-->内容
java.util.Data=转换器类(com.type.MyConverter)
java.util.Date=com.type.MyConverter
项目截图
js小练习:选项卡2.0版
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>选项卡</title> <style type="text/css" media="screen"> #div1 { width: 200px; position: relative; } #div1 span:first-of-type { position: absolute; left: 0; top: 100px; display: none; } #div1 span:last-of-type { position: absolute; right: 0; top: 100px; display: none; } #div1 div { width: 200px; height: 200px; border: 1px #000 solid; display: none; } #div1 input.active { background: red; } #div2 div { width: 200px; height: 200px; border: 1px #000 solid; display: none; } #div2 input.active { background: red; } </style> </head> <script type="text/javascript"> window.onload = function() { tab('div1'); function tab(id) { var oParent=document.getElementById(id); var aInput = oParent.getElementsByTagName('input');; var aDiv=oParent.getElementsByTagName('div'); var aSpan=oParent.getElementsByTagName('span'); var iNow=0; //按钮点击 for (var i = aInput.length - 1; i >= 0; i--) { aInput[i].index=i; aInput[i].onclick=function () { change(this.index); iNow=this.index; } } //鼠标靠近选择按钮出现及消失 oParent.onmouseover=function () { for (var i = aSpan.length - 1; i >= 0; i--) { aSpan[i].style.display='block'; } } oParent.onmouseout=function () { for (var i = aSpan.length - 1; i >= 0; i--) { aSpan[i].style.display='none'; } } //为span添加点击事件 aSpan[1].onclick=function () { if (iNow==aDiv.length-1) { iNow=0; }else{ iNow++; } change(iNow); } aSpan[0].onclick=function () { if (iNow==1) { iNow=aDiv.length-1; }else{ iNow--; } change(iNow); } //因为事件的发生而刺激切换的函数 function change(iNow){ for (var i = aInput.length - 1; i >= 0; i--) { aInput[i].className=''; aDiv[i].style.display='none'; } aInput[iNow].className='active'; aDiv[iNow].style.display = 'block'; } } } </script> <body> <div id="div1"> <input type="button" class="active" name="" value="1"> <input type="button" name="" value="2"> <input type="button" name="" value="3"> <div style="display: block;">11111111111</div> <div>22222222222222 </div> <div>33333333333333 </div> <span><—</span> <span>—></span> </div> </body> </html>
效果如图:
Struts的类型转换的更多相关文章
- struts之类型转换
Struts2的内置类型转换器: Struts2的内置类型转换器,可以为你处理大多数的类型转换,这包括了以下类型和String类型之间的转换! 1.String 将int,double,boolean ...
- Struts中类型转换踩的坑
出现的异常: 当我输入的数据很大时候,转换后如上,这并不是我想要的, 出现问题的原因: Struts2对常用的数据类型如String.Integer.Double等都添加了转换器进行对应的转换操作. ...
- Struts个人总结
编写Struts2第一个程序 Struts2是目前最流行的MVC框架,吸收了传统Struts和WebWork两者的精华,基于Struts2来进行开发可以大大减少开发时间,提高开发效率,并降低后期维护时 ...
- java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点
1.*Action.conversion-properties 如(point=com.test.Converter.PointListConverter) 具体操作类的配置文件 2.*Action. ...
- struts2框架之类型转换(参考第二天学习笔记)
类型转换 1. 什么是类型转换 刚才学习了封装请求参数,把表单数据封装到Action(模型)的属性中.表单中的数据都是String类型,但Action(模型)的属性不一定什么类型. 将来我们还需要数据 ...
- struts2随笔
1.struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面)struts.multipart.maxSize文件上传最大大小struts.action.exte ...
- Struts1使用技巧
转自:https://blog.csdn.net/chjttony/article/details/6099101 1.Struts1是Apache推出的java web开发领域一个比较早,同时也是使 ...
- struts2学习之基础笔记3
第8章Struts 2类型转换 使用类型转换器 自定义类型转换器 步骤:1. Struts 2 构建流程 2.自定义类型转换器类(继承 DefaultTypeConverter /StrutsType ...
- struts基于ognl的自动类型转换需要注意的地方
好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...
随机推荐
- python 简单示例说明os.walk和os.path.walk的不同
import os,os.path def func(arg,dirname,names): for filespath in names: print os.path.join(dirname,fi ...
- NFC(6)NFC编程的几个重要类,NFC硬件启动android应用原理
用于NFC编程的几个重要类 Tag NFC 标签 NfcAdapter Nfc 的适配类 NdefMessage 描述NDEF格式的信息 NdefRecord 描述NDEF信息的一个信息段,类似tab ...
- 【HDOJ】4056 Draw a Mess
这题用线段树就MLE.思路是逆向思维,然后每染色一段就利用并查集将该段移除,均摊复杂度为O(n*m). /* 4056 */ #include <iostream> #include &l ...
- Counting sheep...
Counting sheep... Description: Consider an array of sheep where some sheep may be missing from their ...
- 使用net start mysql的时候出现服务名无效的原因及解决办法
原因:mysql服务没有安装 解决办法:使用管理员权限,执行mysqld -install命令 然后以管理员身份net start mysql开启mysql服务 卸载mysql服务的方法 1.管理员权 ...
- You must supply a layout_width attribute的错误原因及解决办法
学习android的过程中,尝试新功能,结果出现了这个一个error: 05-21 15:38:52.745: E/AndroidRuntime(17608): java.lang.RuntimeEx ...
- win设置壁纸
默认壁纸图片位置: C:\Windows\Web\Wallpaper\Scenes 你可以自己建文件夹,放自己喜欢的桌面壁纸. 设置壁纸: 桌面右键 -> 个性化 然后点击 “桌面背景” - ...
- mappingResources,annotatedClasses(映射)
这两个是有本质区别的,光看名字也能看出来,哈哈,好了,入正题: mappingResources用于指定少量的hibernate配置文件像这样 Xml代码 1 2 3 4 5 6 7 <prop ...
- .net 测试工具类
fluentassertions QuickStart (替换Assert ) https://github.com/dennisdoomen/fluentassertions/wiki Moq ...
- FormsAuthentication 登录兼容 IE11 保存cookie
现象:使用FormsAuthentication进行登录验证,在IE11客户端无法保存cookie 解决方法:在web.config中的forms中增加cookieless="UseCook ...