Serialization JSF会话中的序列化状态是使用ViewScopedBean打破动态生成的字段

Serialization JSF会话中的序列化状态是使用ViewScopedBean打破动态生成的字段,serialization,jsf-2.3,Serialization,Jsf 2.3,我会尽量简化这个问题,因为上下文相当复杂。 我们有一个ViewScoped托管bean,它有一个字段列表,这些字段有一个值、一个id和一个类型等。我们使用该类型来呈现不同的jsf组件,例如:InputText、select、richtext等 在会话中保存状态之前,我们使用c:forEach对字段列表进行iter,这非常有效。但在会话中启用保存状态后,一些奇怪的行为开始发生 在我提交表单后,调用了字段的setter,但在调用actionListener时,字段是空的。我添加了调试信息,看到序列化

我会尽量简化这个问题,因为上下文相当复杂。 我们有一个ViewScoped托管bean,它有一个字段列表,这些字段有一个值、一个id和一个类型等。我们使用该类型来呈现不同的jsf组件,例如:InputText、select、richtext等

在会话中保存状态之前,我们使用c:forEach对字段列表进行iter,这非常有效。但在会话中启用保存状态后,一些奇怪的行为开始发生

在我提交表单后,调用了字段的setter,但在调用actionListener时,字段是空的。我添加了调试信息,看到序列化和反序列化在某处复制了字段对象

我认为这是因为JSTL标记是在视图构建时执行的,组件是在渲染阶段构建的,但我并不完全理解

所以我尝试将c:forEach改为ui:repeat,奇怪的行为消失了,但另一个问题出现了。我需要根据字段的id动态设置id,但是id属性是在视图构建期间计算的,所以现在我没有基于字段属性的id

我是不是遗漏了什么?是构建自定义jsf组件的唯一解决方案吗

对不起,这个糟糕的描述,如果你需要任何其他信息或解释,我很乐意更新这个问题