【发布时间】:2012-04-27 03:08:48
【问题描述】:
我正在开发一个使用 JSF 2.0 和 Richfaces 4 的应用程序,它包含许多显示元素的表格,当然还有常用的查看/编辑/删除选项。经过一些 SO 浏览和 Google 搜索后,我决定发布一个问题,因为我找到的答案并没有解决我的问题。
现在,直截了当,我的应用程序在处理存储在请求 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 + 查看 Scoped Bean: 奇怪的东西在这里。这个不能直接工作,因为 bean 似乎在呈现表单之前就被丢弃了,因为表单是在没有任何信息的情况下呈现的,因为 bean 是干净的。
使用会话 bean: 就像一个魅力,但我不想仅仅因为我还在学习有关 JSF 生命周期的东西,就为每个表单制作一个会话 bean,我想以正确的方式去做。
如果我想保留请求会话方法,有没有办法存储参数(对象或纯字符串)并稍后在请求 bean 上获取?
不知道这是否有帮助,但我正在通过 ui:insert 和 ui:define 使用母版页。
【问题讨论】: