托管豆和范围 - 如何处理?

时间:2011-03-13 11:09:02

标签: java jsf jsf-2 facelets

我想做这样的事情:index.xhtml - > createPerson.xhtml - > addAddress.xhtml - >的index.xhtml。

在Managed-Bean CreatePerson中,将在Managed-Bean AddAddress中创建,填充和保存新的Person-Object我需要Person-Object才能为此人添加地址,之后,它应该导航回起点。我认为,Managed-Bean CreatePerson应该是@SessionScoped,因为我必须将Person-Object注入AddAdress(这里是@ViewScoped)。

我想要一个循环或者更确切地说是创建多个人的可能性,但是如果我有一个SessionScoped-Bean,我的生活时间比我需要的还长?是否有任何命令或注释来摧毁它?您如何处理与范围相关的此类工作流程?

我知道有关会话范围的MyFaces Orchestra,但如果可能的话,我将只使用Eclipse / Tomcat(7.0.11)/ Mojarra(2.0.3)。

2 个答案:

答案 0 :(得分:1)

使用单个视图并使用rendered属性显示/隐藏包含视图的“子窗体”视图。这样你可以使用@ViewScoped bean。

或者,只需在创建后将Person保存在数据库中,并将其id作为请求参数传递给下一个视图,然后再次从DB加载。

答案 1 :(得分:0)

如果您只想(或可以)使用Tomcat和Mojarra,那么BalusC提到的两个解决方案都能很好地工作,尽管您必须保留在单个页面上或在页面导航之间重做查询。您的用例正是Java EE 6(通过CDI)中conversation scope的用例。您也可以通过Weld参考实现将其添加到Tomcat。

当使用BalusC概述的方法停留在单个页面上时,为了给用户一点处理单独页面的印象,可以选择使用“对话框”显示页面的渲染部分(浮动,css,......)。如果您可以选择使用第三方组件库,则可以添加包含随时可用的对话框组件的RichFaces或PrimeFaces。