2014-10-01 2 views
0

뷰 범위를 사용하여 빈을 만들려고 시도하지만 @PostConstruct 함수가 빈에 액세스 할 때마다 호출됩니다. 다음은 아주 간단한 예 (.xhtml)입니다 :뷰빈 빈은 뷰빈의 모든 액세스에서 호출됩니다.

<?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의 기능이 자주 호출되는 것을, 내 로그에 볼 수 있습니다 I "test"기능을 호출하십시오 (이 경우에는 두 번).

빈을 한 번만 만들면 안됩니까? (페이지를 입력 할 때) 또는 누락 된 것이 있습니까?

미리 감사드립니다.

+0

나는 CDI를위한'@ ViewScoped' 구현이 도청 당했다고 강력히 믿습니다. JSF 버전을 사용해보십시오 (CDI 대신'@ ManagedBean'으로 완성). 차이점을 확인하십시오 – kolossus

+0

대단히 감사합니다! @ManagedBean을 사용하면 bean이 제대로 작동합니다. – user2423989

답변

-1

모든 빈에는 고유 한 ID가 있습니다 (다른 요소와 동일). debug mod를 사용하여 다른 클릭에 대해 ID가 같은지 확인하십시오. 어쨌든 버튼 주위에 h : 양식을 추가하는 것이 좋습니다.

+0

새 인스턴스가 생성 될 때마다 확인했습니다. 나는 출력 텍스트 만있는 버튼이 없다. – user2423989

관련 문제