2014-10-01 52 views
0

我正在嘗試使用視圖範圍創建一個bean,但每次訪問bean時都會調用@PostConstruct函數。 這裏是一個非常簡單的例子(.xhtml):viewsbeand bean在後臺bean的每次訪問時調用

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:h="http://java.sun.com/jsf/html">  
     <h:outputText value="#{documentFormBeanTest.test()}" /> 
     <h:outputText value="#{documentFormBeanTest.test()}" /> 
</html> 

,這裏是我的豆:

package lu.etat.pch.docroom.ejb.controllers; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ViewScoped; 
import javax.inject.Named; 
import java.io.Serializable; 

/** 
* User: André Faber 
* Date: 22/04/13 
*/ 

@Named 
@ViewScoped 
public class DocumentFormBeanTest implements Serializable { 
    @PostConstruct 
    public void init() { 
     System.out.println("*************************************************************"); 
    } 

    public void test() { 
     System.out.println("Test"); 
    } 
} 

現在我可以在我的日誌中看到,該PostConstruct函數被調用,經常是我調用「測試」功能(在這種情況下是兩次)。

不應該只創建一次bean(當我進入頁面)或者我錯過了什麼?

在此先感謝

+0

我相當強烈地認爲CDI的'@ ViewScoped'實現有問題。嘗試使用JSF版本(使用'@ ManagedBean'完成而不是CDI)並查看差異 – kolossus 2014-10-02 02:59:37

+0

非常感謝!用@ManagedBean這個bean工作正常。 – user2423989 2014-10-02 12:13:00

回答

-1

每個bean都有其獨特的Id(與任何其他元素一樣)。使用調試模塊,看看你的ID是否在不同的點擊上是相同的。 無論如何,我會建議在按鈕周圍添加一個h:表單。

+0

我檢查過,每次創建一個新的實例。我沒有任何按鈕,只有輸出文本。 – user2423989 2014-10-01 09:06:54