Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何防止null值作为ValueChangedEvent的新值?_Jsf_Jsf 2 - Fatal编程技术网

Jsf 如何防止null值作为ValueChangedEvent的新值?

Jsf 如何防止null值作为ValueChangedEvent的新值?,jsf,jsf-2,Jsf,Jsf 2,在输入类型字段中,我有一个值绑定到一个变量(让我们调用foo),该变量的类型为double,用于jsp中的value属性。我有一个setter和一个getter用于foo,还有一个ValueChangedListener注册用于此输入。该字段的autosubmit属性设置为true。当用户清除输入并导航到下一个字段时,valueChangedListener中的代码将被调用,ValueChangedEvent的newValue将变为空。我怎样才能防止这种情况 我尝试从setter方法处理这个问题

在输入类型字段中,我有一个值绑定到一个变量(让我们调用
foo
),该变量的类型为
double
,用于jsp中的
value
属性。我有一个setter和一个getter用于
foo
,还有一个
ValueChangedListener
注册用于此输入。该字段的
autosubmit
属性设置为true。当用户清除输入并导航到下一个字段时,
valueChangedListener
中的代码将被调用,
ValueChangedEvent
newValue
将变为空。我怎样才能防止这种情况

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

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

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

因此,
valueChangeListener
是作业的错误工具。使用普通的
验证器
。要验证空的必填字段,请使用
required=“true”
。要跳过空字段上的自定义验证器,请将以下上下文参数添加到
web.xml


javax.faces.VALIDATE_空_字段
假的
唯一的缺点是,这也将跳过
@NotNull
/
@NotBlank
jsr303bean验证,但如果您不使用它,这应该不会有什么害处


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

因为旧值会丢失,这将破坏值更改侦听器的用途


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

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

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

因此,
valueChangeListener
是作业的错误工具。使用普通的
验证器
。要验证空的必填字段,请使用
required=“true”
。要跳过空字段上的自定义验证器,请将以下上下文参数添加到
web.xml


javax.faces.VALIDATE_空_字段
假的
唯一的缺点是,这也将跳过
@NotNull
/
@NotBlank
jsr303bean验证,但如果您不使用它,这应该不会有什么害处


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

因为旧值会丢失,这将破坏值更改侦听器的用途


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


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

功能要求是什么?你为什么要阻止这种情况?这完全是意料之中的行为。至于调用顺序,这也完全符合规范。请注意,如果您对
getOldValue()
@BalusC不感兴趣,那么
valueChangeListener
实际上可能是用于实际作业的错误工具。我需要验证新值,而对旧值不感兴趣。还有为什么在
值更改侦听器
之前不调用setter?我还有什么其他选项?验证值?为什么不使用普通的
验证器
?至于调用顺序,为什么应该是?一旦调用setter,旧值将不再可用,这将破坏值更改侦听器的实际用途。@Balusc那么您建议在验证程序中提供空检查吗?现在有一种方法可以防止空值,如果用户清除了该值,则向服务器发送0.0而不是空值?@Balusc验证程序会在valueChangedListener之前运行吗?我想只有当验证通过时,它才应该调用ValueChangedEvent,对吗?功能需求是什么?你为什么要阻止这种情况?这完全是意料之中的行为。至于调用顺序,这也完全符合规范。请注意,如果您对
getOldValue()
@BalusC不感兴趣,那么
valueChangeListener
实际上可能是用于实际作业的错误工具。我需要验证新值,而对旧值不感兴趣。还有为什么在
值更改侦听器
之前不调用setter?我还有什么其他选项?验证值?为什么不使用普通的
验证器
?至于调用顺序,为什么应该是?一旦调用setter,旧值将不再可用,这将破坏值更改侦听器的实际用途。@Balusc那么您建议在验证程序中提供空检查吗?现在有一种方法可以防止空值,如果用户清除了该值,则向服务器发送0.0而不是空值?@Balusc验证程序会在valueChangedListener之前运行吗?我想只有当验证通过时,它才应该