我创建了一个向导(p:wizard),用户可以在其中定义他的配置文件。在向导的其中一个选项卡中,用户可以上传其个人资料照片。照片将在向导的最后一个步骤中呈现。所以,我的问题是,我应该使用什么范围?我尝试了视图,但是带有动态图像的 p:graphicImage 不适用于视图范围(会抛出 npe,因为在渲染图像时会发出两个请求)。我尝试了请求,但是在向导中,当您单击下一步/返回时,会发出一个新请求,并且我以前输入的所有数据都将丢失(Bean 已重新初始化)。最后,我放置了会话范围,它可以工作。我不是会话范围的忠实粉丝,因为 bean 一直保留在范围内,直到会话失效/过期。正确的方法是什么?使豆子无效?
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap.put("#{MySessionBean}", null);
"销毁"会话豆在"道德上"是否正确?我应该创建一个 reset() 方法,使他的所有属性都为空吗?(Bean 仍将保留在会话中)。
关于素数向导组件:
由于素数向导组件位于单个视图中,因此您可以使用 ViewScoped 管理 Bean 来存储信息。
关于会话范围
这里和这里是关于会话范围 bean 销毁的好线程。简而言之:在正确设计的 Web 应用程序中,永远不需要手动终止作用域。