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

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

好在Struts2开放了接口,这样如果有极特别的类型需要用到可以在程序中专门设置转换器进行相应的处理。

 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();
} }

<!--[if !supportLists]-->2、  <!--[endif]-->在classpath目录下新建一个xwork-conversion.properties配置文件,具体内容如下

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

另外在java中的BigDecimal和String的相互转换

/*由数字字符串构造BigDecimal的方法
*设置BigDecimal的小数位数的方法
*/
import java.math.BigDecimal;
//数字字符串
String StrBd="1048576.1024";
//构造以字符串内容为值的BigDecimal类型的变量bd
BigDecimal bd=new BigDecimal(StrBd);
//设置小数位数,第一个变量是小数位数,第二个变量是取舍方法(四舍五入)
bd=bd.setScale(2, BigDecimal.ROUND_HALF_UP);
//转化为字符串输出
String OutString=bd.toString();

Struts2对于BigDecimal类型的转换问题的更多相关文章

  1. struts2中Double类型的转换

    今天做项目,ssh + Extjs,页面js中定义了几个NumberField,对应的value都是double类型的,其中有个NumberField的name为 name,结果执行的时候报错了,说找 ...

  2. Java中的Bigdecimal类型运算

    Java中的Bigdecimal类型运算 双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提 供的API类BigD ...

  3. struts2自己定义类型转换器

    1.1.  struts2自己定义类型转换器 1)        自定类型转换类,继承DefaultTypeConverter类 package com.morris.ticket.conversio ...

  4. struts2基础---->自定义类型转换器

    这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器

  5. BigDecimal类型、Long类型判断值是否相等,以及BigDecimal加减乘除

    //Long是需要比较精度的,所以要用longValueif(project.getFriendId().longValue() != friendId.longValue()) { return t ...

  6. Java基础之8个基本类型及基本类型间转换

    8种基本数据类型 Java语言有8种基本数据类型, 分别用于存储整数.浮点数.字符数据和布尔类型数据.需要注意的是: 现在所介绍的仅仅是基本数据类型,后续还会介绍很多非基本数据类型.基本数据类型如图 ...

  7. spring类型自动转换——@InitBinder和Converter

    spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...

  8. C#高级编程笔记 2016年10月8日运算符和类型强制转换

    1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...

  9. SpringMVC对日期类型的转换

    在做web开发的时候,页面传入的都是String类型,SpringMVC可以对一些基本的类型进行转换,但是对于日期类的转换可能就需要我们配置. 1.如果查询类使我们自己写,那么在属性前面加上@Date ...

随机推荐

  1. Java并发编程的艺术笔记(八)——线程池

    一.线程池的主要处理流程 ThreadPoolExecutor执行execute方法分下面4种情况. 1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步需要获 ...

  2. scrum例会报告+燃尽图01

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9954 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名 ...

  3. leetcode-easy-others-20 Valid Parentheses

    mycode   95.76% class Solution(object): def isValid(self, s): """ :type s: str :rtype ...

  4. Windows下的Crontab表达式解析DLL的使用

    Linux的crontab工具特别的好用,正好现在工作总有好多定时执行的事 用Windows的定时任务觉得特别Low,哈哈,用C#写个任务触发器 然后再用上Crontab表达式解析DLL,觉得马上就高 ...

  5. leetcode 139 单词拆分(word break)

    一开始的错误答案与错误思路,幻想直接遍历得出答案: class Solution { public: bool wordBreak(string s, vector<string>& ...

  6. PowerDesigner 入门使用

    <转载于--https://www.cnblogs.com/biehongli/p/6025954.html> PowerDesigner最基础的使用方法入门学习   1:入门级使用Pow ...

  7. 细说Linux下的虚拟主机那些事儿

    细说Linux下的虚拟主机那些事儿 我们知道Linux操作系统是目前在服务器上应用广泛的操作系统.在Linux操作系统下的虚拟主机是不是就是我们常说的Linux虚拟主机呢?其实从专业方面说并不是,它是 ...

  8. Oracle 归档日志管理

    一.Oracle日志介绍 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和            redo log ...

  9. JS点击img图片放大再次点击缩小JS实现 简单实用Ctrl+C+V就可以用

    业务需要,从后台获取的图片列表,用img标签展示,用户需要查看大图.记录下来以便学习和参考.示例图如下: 放大之前: 放大之后: 点击后放大(由于图片高度超出了页面,需要通过overflow:auto ...

  10. C++写Socket——TCP篇(0)建立连接及双方传输数据

    满山的红叶--飘落之时-- 最近接触了点关于用C++写socket的东西,这里总结下. 这里主要是关于TCP的,TCP的特点什么的相关介绍在我另一篇博文里,所以这里直接动手吧. 我们先在windows ...