struts中jsp提交的数据,struts会自动转换为action中的属性类型;

对于基本的数据类型以及日期类型会自动转换;

就像前面那一篇博客的代码封装一样,会把字符串类型传过来的数据转化为相应的数据;

现在又有一种情况,日期的类型有很多种形式,我们上次输入的是这种形式:2016-12-13,会正常的显示,并且传给后台,但是日期的格式很多种,而一旦我们改成这样20161213,就会出现问题了,如下:(页面还是会相应的跳转的)

那么,现在问题来了,就需要自定义类型格式的转换;

对于基本数据类型以及yyyy-MM-dd日期类型的日期格式会自动转换;

而其他的格式的转换,需要自定义类型转换器,有两种类型:局部类型转换器和全局类型转换器。

Struts转换器API

—TypeConverter  转换器接口

  —DefaultTypeConverter  默认类型的转换器类(实现复杂,一般不去用)

    —StrutsTypeConverter    用户编写的转换器接口,继承此类即可

转换器开发步骤

局部转换器

1、写转换器类(一般在工具包写去写)

  1. package com.type;
  2.  
  3. import java.text.DateFormat;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.Map;
  8.  
  9. import org.apache.struts2.util.StrutsTypeConverter;
  10.  
  11. /**
  12. * 自定义类型转换器
  13. * @author Administrator
  14. *要求:格式支持yyyy-MM-dd/yyyyMMdd/yyyy年MM月dd日
  15. */
  16. public class MyConverter extends StrutsTypeConverter {
  17. //先定义格式
  18. DateFormat df[]={
  19. new SimpleDateFormat("yyyy-MM-dd"),
  20. new SimpleDateFormat("yyyyMMdd"),
  21. new SimpleDateFormat("yyyy年MM月dd")
  22. };
  23. /**
  24. * 把struts转换为指定的类型 [现在 的目标是把string转化为Date]
  25. * @param arg0 当前的上下文环境
  26. * @param arg1 jsp表单提交的字符串的值
  27. * @param arg2 要转换的目标类型
  28. */
  29. @Override
  30. public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
  31. // TODO Auto-generated method stub
  32. SimpleDateFormat sdf=new SimpleDateFormat("yyMMdd");
  33. System.out.println("hhh");
  34. //判断
  35. if (arg1 == null || arg1.length==0) {
  36. return null;
  37. }
  38. //判断类型必须为Date
  39. if (Date.class !=arg2) {
  40. return null;
  41. }
  42. //迭代,转换失败,就继续下一个格式的转换,转换成功直接返回
  43. for (int i = 0; i < df.length; i++) {
  44. try {
  45. return df[i].parse(arg1[0]);
  46. } catch (ParseException e) {
  47. continue;
  48. }
  49. }
  50. return null;
  51. }
  52.  
  53. @Override
  54. public String convertToString(Map arg0, Object arg1) {
  55. // TODO Auto-generated method stub
  56. return null;
  57. }
  58.  
  59. }

2、配置转换器类(告诉struts应用自己的转换器,必须在类的同一个包下写)

在同包的action目录下,新建一个properties文件,

命名规则是:ActionClassName-conversion.properties;

  1. user.birth=com.type.MyConverter

项目截图

总结:这个局部的转换器不能给不其它action使用

这个时候要用全局的转换器

需要写一个转换器,给所有的action用!

配置全局类型转换器

  -->src/xwork-conversion.properties

  -->内容

    java.util.Data=转换器类(com.type.MyConverter)

  1. java.util.Date=com.type.MyConverter

项目截图


js小练习:选项卡2.0版

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta charset="utf-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <title>选项卡</title>
  8. <style type="text/css" media="screen">
  9. #div1 {
  10. width: 200px;
  11. position: relative;
  12. }
  13.  
  14. #div1 span:first-of-type {
  15. position: absolute;
  16. left: 0;
  17. top: 100px;
  18. display: none;
  19. }
  20.  
  21. #div1 span:last-of-type {
  22. position: absolute;
  23. right: 0;
  24. top: 100px;
  25. display: none;
  26. }
  27.  
  28. #div1 div {
  29. width: 200px;
  30. height: 200px;
  31. border: 1px #000 solid;
  32. display: none;
  33. }
  34.  
  35. #div1 input.active {
  36. background: red;
  37. }
  38.  
  39. #div2 div {
  40. width: 200px;
  41. height: 200px;
  42. border: 1px #000 solid;
  43. display: none;
  44. }
  45.  
  46. #div2 input.active {
  47. background: red;
  48. }
  49. </style>
  50. </head>
  51. <script type="text/javascript">
  52. window.onload = function() {
  53. tab('div1');
  54. function tab(id) {
  55. var oParent=document.getElementById(id);
  56. var aInput = oParent.getElementsByTagName('input');;
  57. var aDiv=oParent.getElementsByTagName('div');
  58. var aSpan=oParent.getElementsByTagName('span');
  59. var iNow=0;
  60. //按钮点击
  61. for (var i = aInput.length - 1; i >= 0; i--) {
  62. aInput[i].index=i;
  63. aInput[i].onclick=function () {
  64. change(this.index);
  65. iNow=this.index;
  66. }
  67. }
  68.  
  69. //鼠标靠近选择按钮出现及消失
  70. oParent.onmouseover=function () {
  71. for (var i = aSpan.length - 1; i >= 0; i--) {
  72. aSpan[i].style.display='block';
  73. }
  74. }
  75. oParent.onmouseout=function () {
  76. for (var i = aSpan.length - 1; i >= 0; i--) {
  77. aSpan[i].style.display='none';
  78. }
  79. }
  80.  
  81. //为span添加点击事件
  82. aSpan[1].onclick=function () {
  83. if (iNow==aDiv.length-1) {
  84. iNow=0;
  85. }else{
  86. iNow++;
  87. }
  88. change(iNow);
  89. }
  90. aSpan[0].onclick=function () {
  91. if (iNow==1) {
  92. iNow=aDiv.length-1;
  93. }else{
  94. iNow--;
  95. }
  96. change(iNow);
  97. }
  98.  
  99. //因为事件的发生而刺激切换的函数
  100. function change(iNow){
  101. for (var i = aInput.length - 1; i >= 0; i--) {
  102. aInput[i].className='';
  103. aDiv[i].style.display='none';
  104. }
  105. aInput[iNow].className='active';
  106. aDiv[iNow].style.display = 'block';
  107. }
  108. }
  109. }
  110. </script>
  111.  
  112. <body>
  113. <div id="div1">
  114. <input type="button" class="active" name="" value="1">
  115. <input type="button" name="" value="2">
  116. <input type="button" name="" value="3">
  117. <div style="display: block;">11111111111</div>
  118. <div>22222222222222 </div>
  119. <div>33333333333333 </div>
  120. <span><—</span>
  121. <span>—></span>
  122. </div>
  123. </body>
  124.  
  125. </html>

效果如图:

Struts的类型转换的更多相关文章

  1. struts之类型转换

    Struts2的内置类型转换器: Struts2的内置类型转换器,可以为你处理大多数的类型转换,这包括了以下类型和String类型之间的转换! 1.String 将int,double,boolean ...

  2. Struts中类型转换踩的坑

    出现的异常: 当我输入的数据很大时候,转换后如上,这并不是我想要的, 出现问题的原因: Struts2对常用的数据类型如String.Integer.Double等都添加了转换器进行对应的转换操作. ...

  3. Struts个人总结

    编写Struts2第一个程序 Struts2是目前最流行的MVC框架,吸收了传统Struts和WebWork两者的精华,基于Struts2来进行开发可以大大减少开发时间,提高开发效率,并降低后期维护时 ...

  4. java学习笔记 (2) —— Struts2类型转换、数据验证重要知识点

    1.*Action.conversion-properties 如(point=com.test.Converter.PointListConverter) 具体操作类的配置文件 2.*Action. ...

  5. struts2框架之类型转换(参考第二天学习笔记)

    类型转换 1. 什么是类型转换 刚才学习了封装请求参数,把表单数据封装到Action(模型)的属性中.表单中的数据都是String类型,但Action(模型)的属性不一定什么类型. 将来我们还需要数据 ...

  6. struts2随笔

    1.struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面)struts.multipart.maxSize文件上传最大大小struts.action.exte ...

  7. Struts1使用技巧

    转自:https://blog.csdn.net/chjttony/article/details/6099101 1.Struts1是Apache推出的java web开发领域一个比较早,同时也是使 ...

  8. struts2学习之基础笔记3

    第8章Struts 2类型转换 使用类型转换器 自定义类型转换器 步骤:1. Struts 2 构建流程 2.自定义类型转换器类(继承 DefaultTypeConverter /StrutsType ...

  9. struts基于ognl的自动类型转换需要注意的地方

    好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...

随机推荐

  1. 一篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础

    来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来. 一日,LZ在群里发话,“招人啦.” 然某群友曰,“群主,俺想去.” LZ回之,“你年几何?” 群友曰,“两年也.” LZ憾言之,“惜 ...

  2. vmware-tools安装指南

    为什么要安装VMware Tools? 因为它可以改善Virtual Machine 的运行性能,可以让鼠标能在本地主机和虚拟机中随意出入,而且Host OS 和Guest OS可以 互通有无,实现文 ...

  3. 基于注解的SpringMVC整合JPA

    转载位置:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336768.html 实体类 Department package com.sj.b ...

  4. 深入理解Java虚拟机 - Java体系

    使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把<深入理解Java虚拟机>这本书读 ...

  5. String的intern方法的用处

    今天第一次翻看Effective java,在其第一个item中讲静态工厂方法的有点的时候说到“它们每次被调用 的时候,不要非得创建一个新的对象”并在结尾处提到---"String.inte ...

  6. 【转】 Android 开发 之 JNI入门 - NDK从入门到精通

    原文网址:http://blog.csdn.net/shulianghan/article/details/18964835 NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub  ...

  7. 学习面试题Day07

    1.打印出100以内的素数 该编程题的思路大致如下: (1)完成一个判断某整数是否为素数的方法: (2)循环1--100: (3)每循环一次就判断一次,返回true则打印:package com.ex ...

  8. 如何将域中的AD数据导入SharePoint

    转:http://www.cnblogs.com/wallis0922/archive/2010/09/29/1838292.html 最近刚装好sharepoint2010,想要研究一下,第一件想做 ...

  9. 从ramdisk根文件系统启动Linux成功

    这几天参考国嵌的实验手册和网上的资料完成了u-boot定制.内核定制.ramdisk根文件系统的制作,并成功.趁热打铁,总结一下.本文引用了很多网络上的文章,就不一一注明了.感谢各大侠的帮助,如有雷同 ...

  10. Ildasm.exe(MSIL 反汇编程序)

    MSIL 反汇编程序是 MSIL 汇编程序 (Ilasm.exe) 的伙伴工具. Ildasm.exe 采用包含 Microsoft 中间语言 (MSIL) 代码的可迁移可执行 (PE) 文件,并创建 ...