JSF 2中视图之间的数据流

时间:2010-10-06 11:40:02

标签: jsf jsf-2

我目前正在构建我的第一个JSF 2应用程序,我对视图之间的数据流有一些疑问。

背景

该应用程序跟踪IT顾问的能力。为了说明我的问题,我将仅描述其中的一小部分。能力实体与区域实体具有多对一关系,将不同的能力分组。我有处理这些的视图: Competence.xhtml EditCompetence.xhtml EditCompetenceArea.xhtml 。这些由ManagedBean, AdminCompetenceController 备份。

Competence.xhtml 列出表格中的所有区域,如果用户点击其行,则列出区域中的所有能力。它还有一个Competences和Areas的新按钮,以及每个Competence和Area的Edit按钮。这些分别导致 EditCompetence.xhtml EditCompetenceArea.xhtml ,用户可以在其中填写有关能力或区域的信息。

问题

  • 处理这些页面之间的信息流的推荐方法是什么?例如: EditCompetenceArea.xhtml 需要知道它应该编辑哪个区域(或者它应该创建一个新区域)。我应该每个视图有一个支持bean还是所有视图都有一个支持bean?它应该是会话作用域,并使用变量跟踪所选的Area / Competence吗?或者它应该是View范围并使用viewParams发送所选对象的id?甚至可以使用Request范围吗?我已经尝试了其中的几个并且遇到了每种方法的实际问题。

  • 是否可以使用viewParam在使用不同支持bean的视图之间传输信息?

  • 是否可以将viewParam与Request范围的辅助bean一起使用?在我可以在回发中使用它之前,数据似乎从bean中消失了。

此外,如果任何人都可以推荐任何关于更一般的设计模式的阅读材料(最好是免费的,在线的),而不是 JSF 2 中的特定小问题,我会非常感激。

1 个答案:

答案 0 :(得分:1)

要在具有相同视图的对话中保留数据,请将bean放在视图范围中。导航到其他视图后,数据将丢失。

要在具有不同视图的对话中保留数据,可以将bean放在会话范围内以使其在所有请求/视图中保持活动状态,或者使用<h:inputHidden><f:setPropertyActionListener>等来保留请求范围内的数据后续请求。

在您的特定情况下,我将使用单个主@ViewScoped bean和单个CRUD视图,其中有条件地包含/呈现显示表和编辑表单。