我目前正在构建我的第一个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的视图之间传输信息?
此外,如果任何人都可以推荐任何关于更一般的设计模式的阅读材料(最好是免费的,在线的),而不是 JSF 2 中的特定小问题,我会非常感激。
答案 0 :(得分:1)
要在具有相同视图的对话中保留数据,请将bean放在视图范围中。导航到其他视图后,数据将丢失。
要在具有不同视图的对话中保留数据,可以将bean放在会话范围内以使其在所有请求/视图中保持活动状态,或者使用<h:inputHidden>
,<f:setPropertyActionListener>
等来保留请求范围内的数据后续请求。
在您的特定情况下,我将使用单个主@ViewScoped
bean和单个CRUD视图,其中有条件地包含/呈现显示表和编辑表单。