簡體   English   中英

ViewScoped的工作方式類似於ApplicationScoped

[英]ViewScoped is working like ApplicationScoped

大家好,在將我的問題標記為重復之前,請告訴我我進行了包括這些問題在內的大量研究

@ViewScoped bean的意外生存

ViewScope不會銷毀

ViewScope bean的行為就像具有應用程序范圍

但是我之所以問是因為我使用的是不同版本的工具,卻找不到解決我問題的任何可能的解決方案。

這是情況

我正在使用primefaces 5.1 Spring 3.1.0.RELEASE,Spring安全性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>

所有應用程序具有相同的行為而不僅僅是一個視圖

預先感謝您的時間和答復

您發布的信息很少。 因此,我將向您提供一些有關如何進行故障排除的提示。

  1. 使用會話作用域而不是視圖作用域測試您的bean,並檢查是否有其他行為。 視圖范圍有時很棘手,可能無法按預期工作。 如果每個用戶收到不同的請求,請調查您的bean中有什么,而當切換到查看范圍時,這會觸發錯誤的行為。

  2. 避免將CDI注釋與JSF注釋混合使用。 合並它們時,我遇到了互操作性問題。

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

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

嘗試刪除@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一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM