我目前正在深入学习JSF 2.0,但对于从一个视图到另一个视图传输托管bean属性的理解还有些欠缺。我进行了一些搜索,但没有找到真正好的例子,所以如果有人能指向教程或稍微解释一下这些事情,我会非常感激。
所以这是我的场景:
我正在开发一个小型游乐日历应用程序。第一个视图select.xhtml包含日历选择器,在那里用户可以选择特定日期:
现在,当我从
我现在要解决这个问题:如何将
调试器显示,确实,
我读到的一个解决方案是创建一个
我真的不认为我是第一个遇到这种情况的人,我相信JSF为此提供了一种优雅的解决方案,但我还没有找到那个解决方案。
所以,如果有人知道如何解决这个问题-我在听!;-)
所以这是我的场景:
我正在开发一个小型游乐日历应用程序。第一个视图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" />
...
我的相应支持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>
现在的后备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
视图中填充日期的那个后备bean。我读到的一个解决方案是创建一个
SessionScoped
后备bean,它可以保留所有值。但我认为这不是它应该工作的方式,因为我并不真正需要会话中的信息,我只想让它从A到B“旅行”。使用基于会话的方法的另一个缺点是,在会话中只能使用一个选择器和一个编辑器,这在多窗口浏览等情况下是不可接受的。我真的不认为我是第一个遇到这种情况的人,我相信JSF为此提供了一种优雅的解决方案,但我还没有找到那个解决方案。
所以,如果有人知道如何解决这个问题-我在听!;-)
@ManagedProperty
的请求作用域 bean,也可以使用在构建期间从 externalcontext 中收集参数或使用f:viewParam
参数的视图作用域 bean。 - BalusC