Я пытаюсь создать компонент, используя область представления, но функция @PostConstruct вызывается при каждом доступе компонента. Вот очень простой пример (.xhtml):viewcoped 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 называется так часто, как я вызовите функцию «тест» (в этом случае дважды).
Не должен ли быть создан только один раз (когда я вхожу на страницу), или я что-то упускаю?
Заранее спасибо
Я уверен, что реализация '@ ViewScoped' для CDI прослушивается. Попробуйте использовать версию JSF (в комплекте с '@ ManagedBean' вместо CDI) и посмотрите разницу – kolossus
Большое вам спасибо! С @ManagedBean компонент работает правильно. – user2423989