Jsf javax.el.ELException:在com.example.Bean类型上读取'foo'时出错
我正在读: h:dataTable/@值中使用的表达式通常指定一个属性 为其定义getter的名称,这意味着在控制器中 BookController a类属性books被定义为可选属性以及 名为getBooks的方法这是必需的。在这种特殊情况下,它是 只需定义getBooks方法即可,因为不需要 控制器类中的books属性 我一直试图在eclipse和Tomcat7中实现这样的想法。但它一直在折磨着我: javax.el.ELException:/views/books/listAll.xhtml@9,60 value={bookController.books}:在pl.ctrl.bookController类型上读取“books”时出错 我的问题是,是否有可能:Jsf javax.el.ELException:在com.example.Bean类型上读取'foo'时出错,jsf,properties,el,getter,Jsf,Properties,El,Getter,我正在读: h:dataTable/@值中使用的表达式通常指定一个属性 为其定义getter的名称,这意味着在控制器中 BookController a类属性books被定义为可选属性以及 名为getBooks的方法这是必需的。在这种特殊情况下,它是 只需定义getBooks方法即可,因为不需要 控制器类中的books属性 我一直试图在eclipse和Tomcat7中实现这样的想法。但它一直在折磨着我: javax.el.ELException:/views/books/listAll.xhtm
<h:dataTable value="#{bookController.books}" var="b">
虽然在{bookController}托管bean中没有books属性,只有getBooks getter方法?您的问题与书中所说的不同。如果JSF/EL找不到完整的getter方法,则会出现以下异常: 或者,如果它无法完整地找到bean本身: 但你得到的是: javax.el.ELException:读取pl.ctrl.BookController类型上的“books”时出错 这意味着找到了bean和getter方法,但调用getter方法引发了异常。基本上,以下是在JSF/EL的掩护下发生的:
try {
Object result = bookController.getBooks();
} catch (Exception e) {
throw new ELException("Error reading 'books' on type pl.ctrl.BookController", e);
}
注意,e被传递为ELException的原因。因此,原始异常必须是可见的,因为它是由堆栈跟踪中较低的部分引起的,而您没有在问题的任何地方发布它。最底层的问题是所有问题的根本原因,也是你具体问题的答案。如果您无法解释它,只需将异常类型和消息复制粘贴到一个合适的搜索引擎中即可找到答案和线索
与具体问题无关,从getter方法引发的异常反过来表示可疑代码。getter方法不应该执行任何异常敏感的业务逻辑。也就是说,它可以在每个bean的生命周期中被多次调用,在整个bean的生命周期中反复重复相同的业务逻辑显然是低效的。停止这样做,并将业务逻辑移动到一次性初始化或操作/事件侦听器方法。getter方法必须只返回已经准备好的属性。另请参见和。那么,您的代码在哪里?顺便说一句,如果您定义了一个公共getBooks方法,那么您可以有效地定义一个books属性。您不必定义的是books字段。字段和属性不是一回事。如果getter是受保护的呢?还是私人的?对错误感到好奇,然后。。。我稍后再试,或者这就是原因,你想让OP找出原因-@Kukeltje:只是PropertyNotFoundException。这已经是一项技术要求了。@BalusC:你说得对。原因:javax.el.PropertyNotFoundException:在pl.ctrl.BookController类型上找不到属性“books”。getter是have参数,看起来像:public List getBooksEntityManager em{return Book.getAllObjectsem;实体类中的相关方法是:@SuppressWarnings unchecked public static List getAllObjects EntityManager em{Query Query Query=em.createQuery从Book b中选择b,Book.class;List books=Query.getResultList;return books;}任何帮助!!这在你这方面确实是错误的。单击答案底部的最后一个链接以获得正确的业务逻辑方法,单击该答案底部的链接以获得更多详细信息,等等。