阅读文档总是有帮助的,更具体地说是这些行(强调我的):
应用PostConstruct注释的方法必须满足以下所有条件 - - 除了EJB拦截器之外,方法绝不能有任何参数,在这种情况下,它采用EJB规范定义的InvocationC ontext对象.- 方法的返回类型必须是无效的.- 该方法不得抛出已检查的异常 ...(其他要求省略)
因此,至少不满足返回类型要求(我们不知道您的异常是否被检查,所以我删除了它们,但在这种情况下,您需要在方法中处理异常).
总而言之,用你的方法替换你的方法
@PostConstruct public void search() { MemberDao dao=(MemberDao) Factory.getDao(ConfigReader.getConfig().getProperty("dao.member")); members=dao.list(1, 10); membersId=new int[members.size()]; for(int i=0;i<members.size();i++) membersId[i]=members.get(i).getId(); }
根据您的注释,您的异常类是经过检查的异常.因此,您必须在方法中引入try-catch块,或者让异常继承RuntimeException
.如果您选择以前的方式,您可以重新抛出未经检查的异常IllegalStateException
,或者,例如,发送重定向,以防它为时已晚:
@PostConstruct public void search() { try { MemberDao dao=(MemberDao) Factory.getDao(ConfigReader.getConfig().getProperty("dao.member")); members=dao.list(1, 10); membersId=new int[members.size()]; for(int i=0;i<members.size();i++) membersId[i]=members.get(i).getId(); } catch(DaoImplNotFoundException dinf) { //option one throw new IllegalStateException("Something went wrong."); //option two FacesContext.getCurrentInstance().getExternalContext().redirect("/error.xhtml"); } //other exception types }