如何防止将null值作为ValueChangedEvent的新值



在输入类型字段中,我有一个值绑定到jsp中value属性的double类型的变量(让我们调用foo)。我有一个foo的setter和getter,还有一个为这个输入注册的ValueChangedListener。该字段的autosubmit属性设置为true。当用户清除输入并导航到下一个字段时,valueChangedListener内部的代码被调用,ValueChangedEventnewValue变为空。我该如何防止这种情况发生?

我尝试从setter方法处理这个问题,但似乎没有调用setter,而是先调用valueChangedListener。规范不是说应该首先调用setter来将用户编辑的值填充到组件中,然后只触发ValueChangedListener吗?

p.S:我使用ADF RichInputText作为输入,但我认为它与ADF无关,而是与核心JSF机制有关。因此,没有将其标记为民主同盟军问题。

我需要验证新值,而我对旧值不感兴趣

valueChangeListener则是错误的作业工具。使用普通Validator。为了验证空但必需的字段,请使用required="true"。为了跳过空字段上的自定义验证器,请在web.xml中添加以下上下文参数:

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>

唯一的缺点是,这也会跳过@NotNull/@NotBlank JSR303 bean验证,但如果您无论如何都不使用它,这应该不会有什么害处。


还有为什么在valueChangeListener之前不会调用setter

因为旧的值会丢失,这将违背值更改侦听器的目的。


验证器会在valueChangedListener之前运行吗?我想只有当验证通过时,它才应该调用ValueChangedEvent,对吧

这是正确的。只有当组件通过验证(即UIInput#isValid()返回true)时,才会调用值更改侦听器。需要再次注意的是,当你对旧值不感兴趣时,值更改监听器很可能是你心目中工作的错误工具。

相关内容

  • 没有找到相关文章

最新更新