在getter之前调用所有的@PostConstruct



在JSF2中,我需要一个bean ClassA在PostConstruct期间由ClassB更新,然后显示更新后的值。我的问题是,类a的getter在类b被postconstruct之前被调用。

我的输出是:
ValX:
淡水河谷:托托
ValX: 42

我要的输出:
ValX: 42
淡水河谷:托托
ValX: 42

在view id创建之前没有创建所有bean是否正常?

在调用ClassA的getter之前更新ClassA的正确解决方案是什么?

package test;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class ClassA implements Serializable {
    private String valX;
    @PostConstruct
    public void init() {
        System.out.println("init ClassA");
    }
    public String getValX() {
        System.out.println("get ValX");
        return valX;
    }
    public void setValX(String valX) {
        System.out.println("set ValX");
        this.valX = valX;
    }
}
package test;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class ClassB implements Serializable {
    @ManagedProperty(value = "#{classA}")
    private ClassA classA;
    private String valY = "toto";
    @PostConstruct
    public void init() {
        System.out.println("init ClassB");
        classA.setValX("42");
    }
    public ClassA getClassA() {
        return classA;
    }
    public void setClassA(ClassA classA) {
        this.classA = classA;
    }
    public String getValY() {
        return valY;
    }
    public void setValY(String valY) {
        this.valY = valY;
    }
}
<?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:head>
    </h:head>
    <h:body>
        ValX: #{classA.valX}<br/>
        ValY: #{classB.valY}<br/>
        ValX: #{classA.valX}<br/>
    </h:body>
</html>

可以从ClassA的构造函数初始化classB,这样类b的post构造函数将在类a之前被调用Post构造函数。

首先创建类的对象。

然后是与类绑定的post构造函数,在对象创建后自动执行。

类中的任何其他函数,无论是getter、setter还是普通函数,都只能使用已经创建的对象来调用。

如果要在创建类的对象之前调用函数,则必须将函数声明为静态。在所有其他方式中getter将被称为

相关内容

  • 没有找到相关文章

最新更新