ManagedBean中的PostConstruct表现不尽如人意

时间:2015-03-02 11:26:34

标签: java jsf javabeans postconstruct

所以我有一个bean,ItemHolder,我在其中定义了一个@PostConstruct方法:

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class ItemHolder {

private List<Item> items;

public List<Item> getItems() {
    return items;
}

public void setItems(List<Item> items) {
    this.items = items;
}

@PostConstruct
private void init() {
    items = new ItemList().getItems(); // returns list of items
}

}    

然而,当我尝试在我的xhtml文件中显示值时,我收到“HTTP状态500 - 在托管bean itemHolder上执行资源注入时出错”消息:

<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<h:title></h:title>
</h:head>
<h:body>
<h1>Welcome to the shop #{login.username}.</h1>

#{itemHolder.items.get(0)};


</h:body>

</html>

但是,当我将bean中的@PostConstruct方法更改为以下内容时:

@PostConstruct
private void init() {
    items = new ArrayList<Item>(); 
    items.add(new Item(302, "Name", "URL", 3000, 50, "Description")); 
}

然后我没有错误,输出在我的xhtml页面中显示得很好。

我在第一个@PostConstruct中调用的getItems()方法确实抛出了一些异常,但异常是在该方法中处理的,而不是@PostConstruct,所以我不认为这不重要。尽管如此,它还需要大约5秒的时间来处理。不确定这是不是一个问题。除此之外,它的工作正常,而不是JSF和PostConstruct-annotation。

0 个答案:

没有答案