大家好,在将我的问题标记为重复之前,我想告诉你我做了大量研究,包括那些问题
Unexpected survival of a @ViewScoped bean
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>
所有应用程序具有相同的行为不仅仅是一个视图
提前感谢您的时间和答案
答案 0 :(得分:0)
您发布的细节很少。所以我会给你一些关于如何排除故障的提示。
使用会话范围而不是视图范围测试bean,并检查是否有不同的行为。视图范围有时很棘手,可能无法按预期工作。如果你为每个用户得到一个不同的请求,那么调查你在bean中有什么东西在切换到视图范围时会导致错误的行为。
避免将CDI注释与JSF注释混合使用。合并时我遇到了互操作性问题。
Omnifaces ViewScope是JSF 2.0 / 2.1的CDI注释。在JSF 2.2中,CDI的标准注释是javax.faces.view包中Java EE 7的一部分。
如果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。