JSF中删除dataTable最后一行后@PostConstruct重复调用异常问题
问题原因分析
- 视图状态与数据源绑定失效:JSF的
dataTable依赖后端集合数据源(比如List)渲染行组件。当删除最后一行后,数据源变为空集合,视图树中的dataTable失去可迭代的行节点,导致视图状态(ViewState)和后端Bean的状态完全脱节。 - Bean重复实例化触发异常:如果你的Bean是
@RequestScoped或者@ViewScoped(视图作用域因状态不匹配失效),JSF处理后续删除请求时,会因无法匹配有效视图状态而重新创建Bean实例,进而重复调用@PostConstruct方法。此时因无选中行,请求参数codigouser为空,尝试转换为数字类型时就会抛出NumberFormatException。 - 添加新行后的状态修复:添加新号码后,数据源重新拥有有效数据,
dataTable的视图树和后端Bean状态重新对齐,后续删除操作能正常传递codigouser参数,Bean无需重新初始化,因此不会再触发异常。
内容的提问来源于stack exchange,提问作者Paulo Henrique
相关产品推荐
相关产品推荐

