在使用自定义组件时,我遇到了问题,即UIInput#getValid()
永远不会自行重置。问题是:我必须调用setValid(true)
我自己在应用请求值阶段?
以下是我已完成的步骤:
- 创建自定义组件并继承自
UIInput
- 组件调用
setConverter
在构造函数中
- 该转换器是专门为该组件设计的,并抛出一个
ConverterException
如果无法从 String 转换为模型对象
- 没有验证器
-
decode()
被覆盖,并且如果FacesContext#isPostback
返回 true 我们调用setSubmittedValue
与请求值
- 在渲染响应期间我检查
isValid()
,如果ConverterException
被抛出,我可以相应地做出响应
-
But:如果我提交另一个正确的值
setValid(true)
永远不会为自定义组件调用
默认实现UIInput#decode()
确实打电话EditableValueHolder#setValid()
with true
.
所以你有两个选择:
- 只需调用
super.decode(context)
在你的UIInput#decode()
而不是手动获取提交的值并调用setSubmittedValue()
与它(因为这已经是默认行为UIInput#decode()
).
- 或者,手动调用
setValid(true)
在你的UIInput#decode()
在调用之前setSubimttedValue()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)