整数获取默认值0,其中Java中需要为NULL

时间:2013-08-23 00:19:13

标签: jsf integer

我的要求看起来很简单,但我觉得我在代码中做错了。

当我从UI的InputText字段传递任何内容时,我只需要在Oracle数据库中插入“null”。

PaymantSpecFormPage.xhtml

<h:inputText id="startWeek" value="#{flowScope.paymentSpecVO.paymStartWk}" styleClass="inputTypeForm" maxlength="4"/>

PaymentSpecVO.java

public class PaymentSpecVO extends BaseVO<PaymentSpec> {
   private Integer paymStartWk;

   public Integer getPaymStartWk() {
      return paymStartWk;
   }
   public void setPaymStartWk(Integer paymStartWk) {
      this.paymStartWk = paymStartWk;
   }
}

在我的数据库表中

COLUMN_NAME      DATA_TYPE    NULLABLE    DEFAULT_VALUE
------------     ---------    --------    -------------
PAYM_START_WK    NUMBER(4,0)    Yes             null

当我在inputText中没有输入任何内容时,那么在Table中输入0而不是null,这在我的业务逻辑中有不同的含义,请帮我做必要的代码更改。

3 个答案:

答案 0 :(得分:17)

  

当我在inputText中没有输入任何内容时,则输入0

而不是null

这个问题可以识别为Tomcat的EL解析器没有考虑到您使用的是Integer而不是int。您需要将以下VM参数添加到Tomcat启动选项:

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

另见:


  

它解决了我的一半问题,现在它存储了空值,但在检索时它再次显示0

使用ResultSet#getInt()代替ResultSet#getObject(),可以将此问题视为JDBC的问题。然而,这与第一个问题基本上是不同的问题。您没有说明如何设置数据库访问层,因此很难指出具体的解决方案。

答案 1 :(得分:-1)

我不知道你是怎么读这个xhtml的。 在java层,您可以覆盖PaymentSpecVO的构造函数或paymStartWk的setter

答案 2 :(得分:-1)

试试这个

    public class PaymentSpecVO extends BaseVO<PaymentSpec> {
    private String paymStartWk;

    public String getPaymStartWk() {
    return paymStartWk;
    }
    public void setPaymStartWk(Integer paymStartWk) {
    this.paymStartWk = paymStartWk+"";
  }
}

但是那时你可能需要在那里解析很多。

编辑*

如果没有为“输入文本”输入任何内容,则传递的值为null,但由于您使用整数来捕获它,因此将null解释为0。 因此,当您保存它时,即使将方法和变量操作为null,它也会存储“0”,因为基本上这是默认值。

我认为另一个解决方案是创建一个存储整数的自定义类

示例:

    public class IntegerVal extends Number {
    private Max_val = 10000000;
    private Min_val = -10000000;
    private String default = null;
    }

你可以做任何你想要的实现,比如返回null,

如果你不想使用String,你可以使用它作为你正在使用的整数类的替代