每次访问bean时都会调用viewscoped bean

时间:2014-10-01 08:34:10

标签: jsf view-scope postconstruct

我尝试使用视图范围创建bean,但是每次访问bean时都会调用@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函数被调用的频率与我调用&#34; test&#34;功能(在这种情况下两次)。

不应该只创建一次bean(当我进入页面时)或者我错过了什么?

提前致谢

1 个答案:

答案 0 :(得分:-1)

每个bean都有它唯一的Id(与任何其他元素一样)。使用debug mod并查看您的ID在不同点击次数上是否相同。 无论如何,我建议在按钮周围添加一个h:表单。