最近比较闲,好像没干啥正事。。。这个千万不能给老板知道。。。
啦啦啦啦啦啦啦啦啦啦
中秋出国门溜达了一圈,发现还是国内好,其中琐事这里就不说了
国庆回家带孩子,其中琐事这里也不表了。。。
今天,老大说
我们项目中现在页面要输入数值,数据库是ORACLE 的number类型,所以,我们属性用的是bigdecimal
但是呢,Struts2+Spring+hibernate的框架
页面用ognl表达式
然后呢,ajax提交请求
json传递
就造成了到后台全是string类型,除了哪些基本类型
然后就各种办法。。。。
灵机一动,想到了,可以在vo的set方法返回值为bigdecimal,然后呢,参数为string,试了一下,果然可以
不要以为就结束了。。。。没有
以上方法虽然简单明了,但是。。。
特么每个bigdecimal的属性都要转一下啊,烦
想着有没有什么办法
看到网上有struts类型转换器的帖子
然后,各种晕
为啥呢
因为我们项目中有struts2,ognl,Xwork啊
然后不知道用哪个typeConverter了
然后就翻了一下各个的那啥
继承ognl的DefaultTypeConverter类,然后重写它的convertValue()方法就可以啦。。。。
继承Struts2的StrutsTypeConverter类
一个converFromString(Map context, String[] values, Class toClass)方法
一个converToString(Map context,Object o)方法
Xwork的直接放弃,几乎好像没什么人用xwork了吧,这里就不说了,其实是我也不知道
然后,用的是全局的配置,防止还有其他地方用,所以干脆全局,省得以后还要再配置
这个就不说了,谁要自己去搜吧
然后一个converter类继承DefaultTypeConverter
实现convertValue方法。。。这个网上也有,我也是抄的,稍微改了下
其实,上面,都不是我要说的
我想说的是
bigdecimal不能强转啊。。。这是血的教训啊
早上就开始折腾,不知道哪个货写的公共方法实现string转bigdecimal,我直接调用,鬼知道,特么里面的实现竟然是(bigdecimal)obj
坑了我一个早上啊
以为没有try catch
所以,没有捕获到错误,但是呢,其他地方一直报nosunchmethod。。。setAaaaaa(java.lang.string)。。。
妈蛋,一直赋值不进去
我一直以为是类型转换器不行,一个劲的研究,开始是ognl的,不行就换struts2的。。还是不行
劳资就纳了闷了。。为什么呢。。。
各种调啊
翻帖子啊,怀疑是不是以为传递的时候是string的原因,改为bigdecimal,以为是动态输入的,有点麻烦,不切合实际,改了一半又还原了。。。不靠谱
然后,想着是不是ognl不行,换s:textfield标签。。。不行
换s:property。。。感觉好像不对,又还原
各种办法想啊。。。最后。。。想到一个办法。。。debug啊。。。因为断电后进入了jar包,看不出来啥玩意
还是没发现。。最后的最后,加上了try catch
才发现特么,公共方法错了啊,谁写的啊,坑货。。。
改完后
把几个方法都跑了一下,就是之前尝试换的,只不过是往回试,发现,都是可以的。。。
劳资站起来就是一顿骂。。。谁特么个坑货写的公共方法,这不是坑人吗