我正在开发一个使用 JSF 2.0 和 Richfaces 4 的应用程序,它由许多显示元素的表格组成,当然还有通常的查看/编辑/删除选项。经过一些 SO 浏览和谷歌搜索后,我决定发布一个问题,因为我找到的答案并没有解决我的问题。
现在,直截了当,我的应用程序在处理存储在请求 bean 中的某些属性时遇到问题,并且在某些点上,由于连续请求而丢失。
例如,当我想编辑一个对象时,该对象被发送 (f:propertyActionListener) 到在表单上显示数据的请求 bean,然后在该请求结束时将其丢弃。保存时,会创建一个新对象并将表单上的属性设置为它,并且该项目被保存而不是更新,因为它没有 id (JPA + Hibernate)。
我已经调查了很多选项,这就是我到目前为止所做的事情和结果:
f:param + h:link 或 h:commandLink:使用 @ManagedProperty 参数为空,我无法在 Context 上找到它以通过 JNDI 查找它。
f:setPropertyActionListener + h:commandLink + Request Bean:有效...但我丢失了一些数据。显示数据的表单有一些条件渲染的字段,我无法保存该信息,因此如果验证阶段发现无效数据,表单就会混乱。
f:viewParam + h:commandLink + View Scoped Bean:这里有一些奇怪的东西。这个不能直接工作,因为 bean 似乎在呈现表单之前被丢弃,因为表单是在没有任何信息的情况下呈现的,因为 bean 是干净的。
使用会话 bean:就像一个魅力,但我不想仅仅因为我仍在学习有关 JSF 生命周期的东西而为每个表单创建一个会话 bean,我想以正确的方式来做。
如果我想保留请求会话方法,有没有办法存储参数(对象或纯字符串)并稍后在请求 bean 上获取?
不知道这是否有帮助,但我通过 ui:insert 和 ui:define 使用母版页。