问题 整数获取默认值0,其中Java中需要为NULL [duplicate]


这个问题在这里已有答案:


2693
2017-08-23 00:19


起源

做一个方法! ,,如果InputText为空?返回默认值null - misserandety
<h:inputText id =“startWeek”value =“#{flowScope.paymentSpecVO.paymStartWk}”styleClass =“inputTypeForm”maxlength =“4”/>必须像这样工作,但不是在Integer类的情况下,那就是问题是araises - Inayathulla
您的问题的答案可能在这里: stackoverflow.com/questions/6098210/... - Badaro
@Badaro它解决了我的一半问题,现在它存储空值,但在检索时它再次显示0。 - Inayathulla


答案:


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

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

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

也可以看看:


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

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


16
2017-08-23 11:15



我使用了-Dorg.apache.el.parser.COERCE_TO_ZERO = false作为参数,我的业务逻辑正在使用Integer数据类型而不是int。我正在使用Spring Data JPA来持久化条目。 @Transactional(readOnly = false)public PaymentSpec save(PaymentSpec PaymentSpec); - Inayathulla
对不起,我不做春天。你最好问一个单独的问题为什么a NUMBER 用一个字段 null 获得的值为 0 来自Spring Data JPA。 - BalusC
谢谢,我喜欢看你的评论:) - Inayathulla
@BalusC这个问题实际上存在于JBoss Wildfly 8.2.0决赛中。我有一个 MessageBean 与 Integer 变量是null但是在做的时候 #{not empty value} 组件被渲染。有没有办法治疗 null  Integer 在JSF EL中为null? - Buhake Sindi


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


-1
2017-08-23 00:30



嗨,尝试私有整数paymStartWk = null;但似乎没有运气! - Inayathulla
PaymentSpecVO(){setPaymStartWk(null);} - Gaurav Varma
paymStartWk = null;和PaymentSpecVO(){setPaymStartWk(null);}徒劳无功,剧照将默认值设置为0。 - Inayathulla
然后在其他地方调用你的二传手。你需要检查那部分 - Gaurav Varma
<h:inputText id =“startWeek”value =“#{flowScope.paymentSpecVO.paymStartWk}”styleClass =“inputTypeForm”maxlength =“4”/>,这里JSF组件inputText同时使用setter和getter。 - Inayathulla


尝试这个

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

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

但是那时你可能需要在那里进行大量的解析。

编辑*

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

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

示例:

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

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

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


-1
2017-08-23 01:32



我使用Spring Data JPA save()方法存储在Table中,如果使用Integer而不是String类实现逻辑,那就太好了。 - Inayathulla
如果您对“输入文本”没有输入任何内容,则传递的值为null,但是因为您使用将null解释为0的Integer捕获它。 - misserandety
Integer只是一个包装类,但它不是Object,Objects默认值为null,numeric基本类型的默认值为0 - misserandety
同意,但如果我什么都没输入,我如何在我的bean中将Integer设置为null?并且Integer是一个类,它可以存储空值,而int作为基元不能存储null。 - Inayathulla
你不能,是的,它可以存储null,但你不能得到值,它将返回0。 - misserandety