使用的是sql server
数据库设置的还是4位小数呢,
我测试过,不是数据库的问题
如下:form有个数值的字段:
action中如下 
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response)
    {
        TestForm testform = (TestForm) form;  
        
        System.out.println("  Action "  + testform.getShuzi());
        return   new ActionForward(mapping.getInput());
    }
如果shuzhi文本框不填写的话,testform.getShuzi() 得到的值已经是0.0了!

解决方案 »

  1.   

    Form中的对象并不是业务对象 建议全部采用String类型 因为(request.getParameter都是String) 只有真正的业务对象才要求与数据库中表字段类型一致
      

  2.   

    这个我也想过做,但是form中全部是String以后,哪需要作个业务对象的类,这个类和form的字段一模一样只是数据类型不一致,每次用户填写数据以后需要从 form 转化为对象, 从数据库中取出内容后,需要再转化成form,
    程序的效率值得考虑,还有就是还要做form和业务对象的互相转换,我的form有将近7,8十个字段,
    一一转换挺累的, 大家有什么好的转换方法吗?(或者还有什么办法不需要这种form和业务对象的转换)谢谢!
      

  3.   

    在form 中的 get方法中做一次类型转换(String ->数据库中相应字段的类型)
    在set方法中在做一次类型转换(数据库中相应字段的类型 -> String)
    不知道这样做是否可以
      

  4.   

    谢谢@有点失望,用java有时候就是麻烦!突发奇想,能不能在form中作个方法, 例如 setValue(String 字段名,String 字段值)这样就可以动态的设定form的值了??
      

  5.   

    这个问题应该从你的持久化类解决,
    把你的持久化类的原始类型设定成包装类型就不会出现上面的问题了~例如持久化类中的int换成Integer~我以前就遇到过类似问题,按照我说的方法可以解决~
    不过我用的是Hibernate+MySql~
    可以说这个方案是Hibernate提出来的~
      

  6.   

    java就是麻烦阿,
    看如下
    double getDouble(int columnIndex)
                     throws SQLException以 Java 编程语言中 double 的形式检索此 ResultSet 对象的当前行中指定列的值。 参数:
    columnIndex - 第一个列是 1,第二个列是 2,…… 
    返回:
    列值;如果值为 SQL NULL,则返回值为 0 也就是说从数据库取数时最好不要使用getDouble,
    不然的话就会给空的字段赋值0!
      

  7.   

    commons-beanutils.jar中PropertyUtils的copyProperties方法可以实现从一个Object到另一个Object的值的转寄,当然,这两个Object中变量名命名必须一致。可以解决
    hafocus():谢谢@有点失望,用java有时候就是麻烦!突发奇想,能不能在form中作个方法, 例如 setValue(String 字段名,String 字段值)这样就可以动态的设定form的值了??这个问题