1

在输入类型字段中,我有一个值绑定到我的 jsp中的属性foo类型的变量(让我们调用) 。我有一个 setter 和一个 getter ,并且还有一个为此 input 注册的。该字段的属性设置为 true 。当用户清除输入并导航到下一个字段时,里面的代码会被调用,并且of the将变为null 。我怎样才能防止这种情况?doublevaluefooValueChangedListenerautosubmitvalueChangedListenernewValueValueChangedEvent

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

PS:我使用 ADF RichInputText 作为输入,但我认为它与 ADF 无关,而是与核心 JSF 机制有关。因此不将其标记为 ADF 问题。

4

1 回答 1

1

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

那么AvalueChangeListener是该工作的错误工具。使用普通的Validator. 为了验证空但必填的字段,请使用required="true". 为了跳过空字段上的自定义验证器,请将以下上下文参数添加到web.xml

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

唯一的缺点是这也会跳过@NotNull/ @NotBlankJSR303 bean 验证,但如果你不使用它应该不会有什么害处。


还有为什么 setter 不会在valueChangeListener?

因为旧值否则会丢失,这将破坏值更改侦听器的目的。


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

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

于 2013-02-06T14:21:47.523 回答