11

My requirement looks simple, but I feel I'm doing something wrong in code.

All I need is to insert "null" in Oracle Database when nothing is passed from InputText field of UI.

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

And in my DB Table

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

And when I enter nothing in inputText, then instead of null, 0 is getting entered in Table, which has different meaning in my business logic, please help me to do necessary code changes.

4

3 回答 3

17

当我在 inputText 中没有输入任何内容时,在表中输入了 0 而不是 null

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

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

也可以看看:


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

这个问题可以识别为 JDBC 使用ResultSet#getInt()而不是ResultSet#getObject(). 然而,这与第一个问题本质上是不同的问题。你没有告诉任何关于你的数据库访问层是如何设置的,所以很难指出一个具体的解决方案。

于 2013-08-23T11:15:10.943 回答
-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,你可以用它来代替你正在使用的 Integer Class

于 2013-08-23T01:32:08.473 回答
-1

我不知道您是如何阅读该 xhtml 的。在 java 层,您可以覆盖 PaymentSpecVO 的构造函数或 paymStartWk 的设置器

于 2013-08-23T00:30:46.533 回答