是否有必要在 JSF 自定义组件的decode() 中调用setValid(true)?

2024-01-21

在使用自定义组件时,我遇到了问题,即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(使用前将#替换为@)

是否有必要在 JSF 自定义组件的decode() 中调用setValid(true)? 的相关文章

随机推荐