ViewScoped的工作方式与ApplicationScoped类似

时间:2014-11-21 17:17:38

标签: java spring jsf jsf-2 primefaces

大家好,在将我的问题标记为重复之前,我想告诉你我做了大量研究,包括那些问题

Unexpected survival of a @ViewScoped bean

ViewScope not destroy

ViewScope beans behaves like it has application scope

但是我问,因为我使用的是不同版本的工具,但没有找到解决问题的方法。

这是情况

我正在使用primefaces 5.1 Spring 3.1.0.RELEASE,Spring security 3.1.1.RELEASE,JSF 2.2.8和Apache 8。

我进入我的应用程序并开始工作,但如果其他机器中具有不同浏览器和不同会话ID的其他人进入相同的xhtml视图,他将看到我写的数据。所以看起来我的应用程序的所有控制器都在@ApplicationScoped中,但它们都是@ViewScoped

在调查过程中我做了调试,在第一次访问视图时,该视图调用控制器,但当其他人访问同一个视图时,控制器没有被调用,我不知道视图是如何获取的数据如果没有调用控制器。

这是我的控制器之一

import javax.faces.bean.ViewScoped;
@ViewScoped
@ManagedBean
@Controller
public class CreateRepoController {

    @Autowired
    private IRepoFacade repositorioFacade;
    @Autowired
    private ISecureFacade secureFacade; 
    //Methods


}

注意我还尝试使用import org.omnifaces.cdi.ViewScoped;而不是javax viewScoped

从菜单中调用视图

            <p:submenu label="Repo">
                        <p:menuitem value="Create" url="/secured/createRepo.xhtml" />
            </p:submenu>

所有应用程序具有相同的行为不仅仅是一个视图

提前感谢您的时间和答案

2 个答案:

答案 0 :(得分:0)

您发布的细节很少。所以我会给你一些关于如何排除故障的提示。

  1. 使用会话范围而不是视图范围测试bean,并检查是否有不同的行为。视图范围有时很棘手,可能无法按预期工作。如果你为每个用户得到一个不同的请求,那么调查你在bean中有什么东西在切换到视图范围时会导致错误的行为。

  2. 避免将CDI注释与JSF注释混合使用。合并时我遇到了互操作性问题。

  3. Omnifaces ViewScope是JSF 2.0 / 2.1的CDI注释。在JSF 2.2中,CDI的标准注释是javax.faces.view包中Java EE 7的一部分。

  4. 如果ypu仍有问题,请尝试切换到所有CDI。而不是@ManagedBean使用来自javax.faces.view的@Named和@ViewScoped。

答案 1 :(得分:0)

尝试删除@Controller注释并扩展SpringBeanAutowiringSupport以启用注入。

@ManagedBean
@ViewScoped
public class CreateRepoController extends SpringBeanAutowiringSupport implements Serializable {
     @Autowired
     private IRepoFacade repositorioFacade;
     @Autowired
     private ISecureFacade secureFacade; 
     //Methods
}

适用于Spring 4.0.6和PF 5.1。