【发布时间】:2011-06-29 18:22:39
【问题描述】:
我目前正在深入了解 JSF 2.0,但对托管 bean 属性从一个视图到另一个视图的“传输”缺乏一点了解。我搜索了一下,但没有找到一个很好的例子,所以如果有人能指点我一个教程或稍微解释一下,我真的很感激。
所以这是我的场景:
我正在开发一个小型游乐场日历应用程序。第一个视图select.xhtml 包含日历选择器,用户可以在其中选择特定日期:
<html>
...
<h:form>
<!-- Calendar selector from primefaces -->
<p:calendar value="#{calendarSelect.date}" mode="inline" navigator="true" />
<p:commandButton value="Show entries for date" action="day" />
...
我对应的 backing bean 是这样的:
@ManagedBean(name="calendarSelect")
@RequestScoped
public class CalendarSelectComponent {
private Date date = null;
... // Getters and setters
现在,当我从select.xhtml 提交表单时,我将转发到day.xhtml
<html>
...
<h:form>
The current day ist:
<h:outputText value="#{calendarEdit.date}">
<f:convertDateTime pattern="dd.MM.yyyy" />
</h:outputText>
backing bean 现在看起来像这样:
@ManagedBean(name="calendarEdit")
@ViewScoped
public class CalendarEditComponent implements Serializable {
private Date date = null;
private CalendarEntryBean currentEntry = null;
private List<CalendarEntryBean> allEntries = null;
....
我现在正在尝试解决问题:如何将date 参数从选择器 传输到编辑器?
我尝试了多种选择,其中一种是:
<p:commandButton value="Show entries for date" action="day" />
<f:setPropertyActionListener target="#{calendarEdit.date}" value="#{calendarSelect.date}" />
</p:commandButton>
调试器显示,确实,calendarEdit 的date 属性填充了来自calendarSelect 的值,但由于day.xhtml 是一个新视图,因此正在创建一个新的CalendarEditComponent 支持bean而不是我在 select 视图中的选择器中填充的日期。
我读过一个解决方案是创建一个SessionScoped 支持bean,它确实保留了它的所有值。但这不是我认为它应该工作的方式,因为我真的不需要 session 中的信息,我只是希望它从 A 到 B “旅行”。另一个缺点是基于会话的方法是每个会话我只能使用一个选择器和一个编辑器 - 如果您想到多窗口浏览等,我认为这是不可接受的。
我真的不认为我是第一个遇到这种情况的人,我确信 JSF 为此提供了一个优雅的解决方案,但我一直无法找到那个解决方案。
再一次,如果有人知道如何处理这个问题 - 我在听! ;-)
【问题讨论】:
标签: java jsf jsf-2 backing-beans