• Struts中类型转换踩的坑


    出现的异常:

        

        当我输入的数据很大时候,转换后如上,这并不是我想要的,

        出现问题的原因:

    Struts2对常用的数据类型如String、Integer、Double等都添加了转换器进行对应的转换操作。

    BigDecimal其实也算作是一种常用的数据类型,但Struts2没有对该类型设置转换器。没有转换器而且传递的值为空的属性,Struts2都给默认成了String类型进行处理。如果处理不当,就很容易造成类型转换异常。

      这个时候我们可以有2种方法解决这个问题

    1.:

    package com.hzunitech.system.common.convert;
    
    import java.math.BigDecimal;
    import java.util.Map;
    
    import org.apache.struts2.util.StrutsTypeConverter;
    
    public class BigDecimalConverter extends StrutsTypeConverter {
    
        @Override
        public Object convertFromString(Map context, String[] values, Class toClass) {
            BigDecimal bd = null;
            if(BigDecimal.class ==toClass){
                String bdStr = values[0];
                if(bdStr!=null&&!"".equals(bdStr)){
                    bd = new BigDecimal(bdStr);
                }else{
                    //bd = BigDecimal.valueOf(-1);
                }
                return bd;
            }        
            return BigDecimal.ZERO;
        }
    
        @Override
        public String convertToString(Map context, Object o) {
            
            if(o instanceof BigDecimal){
                BigDecimal b = new BigDecimal(o.toString()).setScale(2,BigDecimal.ROUND_HALF_DOWN);
                return b.toString();
            }        
            return o.toString();
        }
    
    }

     需要在配置文件:

    在classpath目录下新建一个xwork-conversion.properties配置文件,具体内容如下

    java.math.BigDecimal=com.hzunitech.system.common.convert.BigDecimalConverter

    第二种:

      

    java.lang.Double = cn.sh.cares.framework.web.struts2.converter.DefaultStrutsTypeConverter
    java.lang.Float = cn.sh.cares.framework.web.struts2.converter.DefaultStrutsTypeConverter
    java.math.BigDecimal = cn.sh.cares.framework.web.struts2.converter.DefaultStrutsTypeConverter

    直接在xwork-conversion.properties配置就可以了

    解决后:

      每天进步一点,离梦想就近一点了!

  • 相关阅读:
    Oracle 数据库管理脚本 命名规范
    Oracle 插入大量数据
    9i Data Gurad 报ORA12154: TNS:could not resolve service name 错误
    Oracle OCM 认证指南
    Redo Log 和Checkpoint not complete
    自己录制的Oracle 相关视频(陆续更新)
    自己录制的Oracle 相关视频(陆续更新)
    Oracle Rman 命令详解(List report backup configure)
    linux下手动删除数据库实例
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
  • 原文地址:https://www.cnblogs.com/java-synchronized/p/6932249.html
Copyright © 2020-2023  润新知