Java 托管bean和作用域-如何处理它?

Java 托管bean和作用域-如何处理它?,java,jsf,jsf-2,facelets,Java,Jsf,Jsf 2,Facelets,我想这样做:index.xhtml->createPerson.xhtml->addAddress.xhtml->index.xhtml 在ManagedBeanCreatePerson中,将创建、填充和保存一个新的Person对象,在ManagedBeanAddAddress中,我需要Person对象,以便向此人添加地址,然后,它应该导航回起始点。我认为,托管Bean CreatePerson应该是@SessionScoped,因为我必须将Person对象注入AddAddress(这里是@Vi

我想这样做:index.xhtml->createPerson.xhtml->addAddress.xhtml->index.xhtml

在ManagedBeanCreatePerson中,将创建、填充和保存一个新的Person对象,在ManagedBeanAddAddress中,我需要Person对象,以便向此人添加地址,然后,它应该导航回起始点。我认为,托管Bean CreatePerson应该是@SessionScoped,因为我必须将Person对象注入AddAddress(这里是@ViewScoped)

我希望有一个循环,或者更确切地说是创建多个人的可能性,但是如果我有一个SessionScoped Bean,它的寿命比我需要的长,我怎么能做到这一点呢?是否有任何命令或注释来销毁它?您如何处理与范围相关的工作流


我知道MyFaces管弦乐队有对话范围,但如果可能的话,我将只使用Eclipse/Tomcat(7.0.11)/Mojara(2.0.3)来实现。使用单个视图,并使用
呈现的
属性来显示/隐藏包含的视图,其中的“子窗体”相互依赖。这样,您就可以使用
@ViewScoped
bean

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

如果您只想(或可以)使用Tomcat和Mojarra,那么BalusC提到的两种解决方案都能完美工作,尽管有局限性,您必须停留在单个页面上或在页面导航之间重做查询。您的用例正是JavaEE6(通过CDI)中的
对话范围所针对的。您也可以通过Weld参考实现将其添加到Tomcat中

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