【发布时间】:2013-02-06 13:51:30
【问题描述】:
在输入类型字段中,我的 jsp 中的 value 属性有一个值绑定到 double 类型的变量(让我们调用 foo)。我有一个 foo 的 setter 和一个 getter,还有一个 ValueChangedListener 为此输入注册。该字段的 autosubmit 属性设置为 true 。当用户清除输入并导航到下一个字段时,valueChangedListener 中的代码被调用,ValueChangedEvent 的 newValue 变为 null 。我怎样才能防止这种情况?
我尝试从 setter 方法处理这个问题,但似乎 setter 没有被调用,valueChangedListener 被首先调用。规范不是说应该首先调用 setter 来将用户编辑的值填充到组件中,然后只触发 ValueChangedListener 吗?
P.S:我使用 ADF RichInputText 作为输入,但我认为它与 ADF 无关,而是与核心 JSF 机制有关。因此不将其标记为 ADF 问题。
【问题讨论】:
-
功能需求是什么?为什么要阻止这种情况?这是完全预期的行为。至于调用顺序,也完全符合规范。请注意,如果您对
getOldValue()不感兴趣,valueChangeListener实际上可能不是实际工作的错误工具。 -
@BalusC 我需要验证新值,我对旧值不感兴趣。还有为什么在
valueChangeListener之前不会调用 setter?我还有哪些其他选项? -
验证值?为什么不使用普通的
Validator?至于调用顺序,为什么要这样?一旦调用了 setter,旧值就不再可用,这违背了值更改侦听器的实际目的。 -
@Balusc 所以你建议在验证器中提供一个空检查?现在有办法防止空值,如果用户清除了该值,则将 0.0 发送到服务器而不是空值?
-
@Balusc 验证器会在 valueChangedListener 之前运行吗?我猜只有当验证通过时,它才应该调用 ValueChangedEvent ,对吧?