【问题标题】:Avoid default long value of 0 to display in h:inputText避免在 h:inputText 中显示默认长值 0
【发布时间】:2011-11-21 03:39:01
【问题描述】:

我有一个<h:inputText>,它接受像这样的long

<h:inputText value="#{ServiceTable.ID}" />

属性是这样声明的

public class ServiceTable {

    private long ID;

    // Getter and setter for ID.
}

当我打开页面时,我总是在文本框中看到0。我怎样才能避免它?我只需要一个空的文本框。我正在使用 JSF 1.2。

【问题讨论】:

    标签: jsf jsf-1.2


    【解决方案1】:

    使用Long 而不是long。默认为null

    private Long ID;
    

    而且,如果您运行的是 Tomcat 6.0.16 或更新版本或它的一个分支,那么您还需要将以下 VM 参数添加到服务器启动参数中,以禁用原语及其包装器的 EL 强制:

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

    【讨论】:

    • 感谢 BalusC 的回复。我经常阅读你的博客。它对新手来说非常有用和有用。你能解释一下有什么区别吗?
    • long 是一个原语,当声明为类/实例变量时,它的默认值为 0Long 是一个包装对象,其默认值为null。这只是基本的Java。另请参阅有关原始类型的 Java 教程:download.oracle.com/javase/tutorial/java/nutsandbolts/…
    • 感谢 BalusC 的帮助。它成功了。你能告诉在哪里添加上述命令吗?
    • 作为启动 VM 参数或 JAVA_OPTS 环境变量。但如果它有效,那么您无论如何都不需要添加该参数。
    • 我还有一个小的澄清。今天我解决了这个问题,你回答了stackoverflow.com/questions/2524514/… 它工作正常。但是即使在提交后复选框仍然处于选中状态。如何避免这种情况?
    【解决方案2】:

    太糟糕了!许多开发人员无法访问实际的服务器,有时您只是无法前往客户端并告诉他:“停止您的服务器并使用此启动选项重新启动所有内容”。

    为什么 apache 团队的人从来没有想过这个问题?

    如果您处于这种情况 - 像我一样 - 另一种解决方案是将字段作为字符串获取并在您的支持 bean 中手动解析它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多