所以我开发了一个基于JSF的应用程序,它有一个导航菜单(PrimeFaces菜单)和一个中央内容区域,这个内容区域是动态的,它根据导航菜单的活动元素刷新。想象一下如下。
<ui:composition template="/WEB-INF/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:define name="nav">
Navigation menu with items
</ui:define>
<ui:define name="content">
<ui:include src="#{pageManager.currentPage}.xhtml"/>
</ui:define>
</ui:composition>
每个内容部分(所有基于ajax)都有它自己的模型和它自己的@ViewScoped
bean,每个控制器bean都会利用一些CDI bean来做CRUD类型与模型一起操作。这些bean大多只是企业@RequestScoped
。
一切正常。我的问题是因为技术上从来没有这样的导航(内容div更新,没有来自page1-&gt; page2等的导航)我相信我的所有控制器bean都保留在viewcope中,无论该内容是否有效,我认为注入其中的CDI bean也有效地提升到了视图范围。这是对的吗?
如果有更好的方法,只要它只是页面的内容部分根据活动的菜单选择而改变?
答案 0 :(得分:1)
只要您需要状态且无法对某些bean使用RequestScope,行为就会与您所描述的完全相同。
如果您对ViewScoped bean中使用的内存大小没有问题,则不必担心。