Java ManagedBean中的后构造行为不符合预期

Java ManagedBean中的后构造行为不符合预期,java,jsf,javabeans,postconstruct,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

所以我有一个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
}

}    
但是,我得到一个HTTP状态500-当我尝试在xhtml文件中显示该值时,在托管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注释。

您忘记发布堆栈跟踪。一个好的异常和堆栈跟踪通常已经代表了整个答案。如果getItems抛出一个异常,导致一个空项,您的期望是什么?stacktrace在哪里?那么您的ItemHolder ManagedBean很好,ItemList类可能有问题。把密码贴出来。