2014-11-21 27 views
0

大家請提前標記爲複製,我想告訴你,我做了一個巨大的研究,包括那些問題ViewScoped正在像ApplicationScoped

Unexpected survival of a @ViewScoped bean

ViewScope not destroy

ViewScope beans behaves like it has application scope

我的問題但是我在問,因爲我使用的是不同版本的工具,沒有找到任何可能的解決方案來解決我的問題。

情況是這樣的

使用I'm primefaces 5.1春天3.1.0.RELEASE,春季安全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

您已經發布了很少的細節。所以我會給你一些關於如何排除故障的提示。

  1. 用會話範圍而不是視圖範圍測試你的bean,並檢查你是否得到不同的行爲。視圖範圍有時很棘手,可能無法按預期工作。如果每個用戶都得到不同的請求,那麼調查一下當你切換到查看範圍時,你在bean中發生了什麼錯誤行爲。

  2. 避免混合CDI註解使用JSF註釋。合併它們時,我遇到了互操作性問題。

  3. Omnifaces ViewScope是CDI註解爲JSF 2.0/2.1。在JSF 2.2中,CDI有一個標準註釋,作爲javax.faces.view包中Java EE 7的一部分。

  4. 嘗試切換到所有CDI如果YPU還是有問題。而不是@ManagedBean使用javax.faces.view中的@Named和@ViewScoped。

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。