【问题标题】:Passing empty string to .tag with a java.lang.Integer attribute results in 0 (not null)使用 java.lang.Integer 属性将空字符串传递给 .tag 会导致 0(非空)
【发布时间】:2012-09-12 04:32:23
【问题描述】:

我有一个带有 java.lang.Integer 类型属性的 .tag 文件,如下所示:

<%@ attribute name="userId" required="true" type="java.lang.Integer"%>

当向这个标签传递一个空字符串时,该属性的值最终是 0 而不是 null (正如我希望使用 java .lang.Integer 和所有)。

我错过了什么吗?在这种情况下有什么办法可以强制属性值为null

【问题讨论】:

    标签: java jsp jsp-tags


    【解决方案1】:

    我的猜测是,如果类型转换失败(即传入的值不会解析为 Integer,因此 Integer.parseInt 会抛出 NumberFormatException),那么属性会初始化为 0。这种区分是有意义的在这种情况和空对象引用之间。

    在您的 .tag 文件中使用 String 属性怎么样?然后,您可以测试它的值(对于 null 或空等)并根据需要转换为 Integer。

    【讨论】:

    • 将属性定义为字符串确实可以按照您的建议工作,我只是希望在使用 bum 值调用标签时可以强制异常。
    • 这里解释得很清楚:stackoverflow.com/a/9771260/375025。它与您使用的 Tomcat 版本有关。 Tomcat 8 修复了该行为,或者您可以设置系统属性:-Dorg.apache.el.parser.COERCE_TO_ZERO=false
    猜你喜欢
    • 2015-09-09
    • 2021-10-24
    • 2014-04-30
    • 1970-01-01
    • 2012-11-13
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多