【发布时间】:2012-06-03 14:15:43
【问题描述】:
做一个 CRUD,我有一个 RequestScoped Ticket bean。
我有一个 XHTML 页面,直到现在我一直在使用它来创建新票证;工单字段直接填充(#{ticket.description} 等)
现在我有一个列出票证的搜索表单,每张票证都有一个链接,其中票证 ID 作为参数。我希望支持 bean 从 EJB/JPA 中检索票证 bean(已经完成)并将其放入请求中。我看到了 3 种方法:
- 将从 JPA 检索到的 bean 中的数据复制到注入提供的 bean 中。丑陋/容易遗漏。
- 使用ExternalContex#getRequestMap 并自己将bean 放在那里。看起来不太妥当。我说的对吗?
- 将我的票 bean 包含到另一个 bean 类中,这样我就可以做
myNewBean.setTicket(ticketFromJpa);。似乎是最好的选择,但我不喜欢为此在页面中添加所有 EL 前缀。
有没有更清洁、更合适的方式来做我想做的事?
提前致谢。
更新:
用更多信息来改写我想要的内容。我在页面P1 中有一个commandLink,它在支持bean B1 中调用动作A。 B1 执行其逻辑并重定向到页面 P2。
我想在A 中设置一个(请求范围的)bean B2,并且B2 可用于绘制P2。
通过实验,我发现在离开操作A 后,框架会创建一个新的B2 请求范围bean,所以看起来请求范围比我预期的要短。
Damian 提出的 flash 范围看起来更像我想要的,但迫使我围绕 #{flash} 重新设计页面,并且(当我想使用它来创建新 bean 时)我还必须添加bean 到 flash 中的操作方法(目前它只是转到页面并且托管 bean 可用)
我希望从那时起维护一个请求范围的 bean
【问题讨论】:
-
为什么需要在请求中放入ticket?接下来你想做什么?
-
我想将工单传递给 .xhtml 页面,以便它呈现工单数据。