뷰 범위를 사용하여 빈을 만들려고 시도하지만 @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"기능을 호출하십시오 (이 경우에는 두 번).
빈을 한 번만 만들면 안됩니까? (페이지를 입력 할 때) 또는 누락 된 것이 있습니까?
미리 감사드립니다.
나는 CDI를위한'@ ViewScoped' 구현이 도청 당했다고 강력히 믿습니다. JSF 버전을 사용해보십시오 (CDI 대신'@ ManagedBean'으로 완성). 차이점을 확인하십시오 – kolossus
대단히 감사합니다! @ManagedBean을 사용하면 bean이 제대로 작동합니다. – user2423989