【发布时间】:2012-09-07 14:56:33
【问题描述】:
我对 JSF 很陌生,并没有真正“习惯”不同的想法,所以我在(我认为)是基本的东西上苦苦挣扎。
假设我有一个 User 类,它是一个会话 bean。
假设我有一个包含 10000 个对象的控制器,比如 Factory,它需要能够将其中一些设置为“锁定”,在我们的例子中,这意味着“锁定”字段不再变为 null,而是引用“LockedItem”对象。
这是我无法正常工作的地方:LockedItem,当你实例化它时,它应该引用当前登录的用户。我应该怎么做?
我尝试使用@managedproperty 进行注入,但它在 LockedItem.constructor 中为空(我认为这是正常的)然后我尝试使用 @PostConstruct 方法,但从未调用过该方法(为什么?即使我将其设为 managedbean ... postconstruct 方法是否仅在“.xhtml”创建对象时调用?) 或者我应该使用“java se”技巧,比如让用户静态?
阐明为什么不调用 @PostConstruct 的代码(“Seat”之一):
.xhtml
<h:outputLabel id="user" value="Hello #{user.name}" />
<h:outputLabel id="car" value="you have #{car.brand}" />
用户
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class User implements Serializable {
private String name ;
public User()
{
name = "toto";
System.out.println("User constructor");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
汽车
package test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class Car implements Serializable {
private String brand ;
private Seat seat ;
public Car()
{
brand = "audi" ;
seat = new Seat();
System.out.println("Car constructor") ;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
座位
package test;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean
public class Seat implements Serializable {
private int nb ;
private String userName ;
@ManagedProperty("#{user}")
private User user ;
public Seat()
{
nb = 4 ;
userName="na";
System.out.println("! Seat constructor ") ;
}
@PostConstruct
public void init()
{
System.out.println("!! Seat postconstruct : "+user.getName());
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getNb() {
return nb;
}
public void setNb(int nb) {
this.nb = nb;
}
}
谢谢!
【问题讨论】:
标签: jsf design-patterns code-injection managed-bean postconstruct