2010-05-31 63 views
3

我有一个JSF页面的托管bean,它在构造函数中执行JPA调用来填充bean中的字段。我在继续调用一个实体(填充数据以进行测试)方面遇到了一些麻烦。我期待它抛出某种异常,因为它不起作用,但我没有得到任何东西。只是它的赫克我试过如下:JSF隐藏异常?

Query newQuery = em.createQuery("Bad Syntax"); 
List newList = newQuery.getResultList(); 

我期望的IllegalArgumentException在这里,因为查询字符串是完全无效,但页面仍然加载,我看不出有任何异常的任何地方。

我是否期待这种例外?如果是这样,为什么我没有看到它?

+1

您是否尝试过在查询执行后查看“newList”的值是什么? – pakore 2010-06-01 09:32:42

回答

0

那么,NetBeans似乎存在某种问题,无法正确重新部署所有内容。当我开始排除故障时,我一直在运行干净的版本,但在让事情坐了几天回去之后,我现在看到了我期望看到的内容。

所致:java.lang.IllegalArgumentException异常: 异常描述::语法错误解析查询[坏语法],第1行,第0列:意外的标记[同时创造在EntityManager的查询时发生异常坏]。

我不知道什么教训,我真的从中学到,但它肯定删除了一些我信任的NetBeans。

1

默认情况下,它不会抑制异常。作为一个快速测试,我试过如下:

package com.example; 

import javax.faces.bean.ManagedBean; 

@ManagedBean 
public class Bean { 

    public Bean() { 
     throw new IllegalArgumentException("No!"); 
    } 

} 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <title>test</title> 
    </h:head> 
    <h:body> 
     #{bean} 
    </h:body> 
</html> 

和我同在网页浏览器下面的跟踪一个不错的默认错误页:

javax.el.ELException: /test.xhtml: Cant instantiate class: com.example.Bean. 
    at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:83) 
    at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:75) 
    at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:176) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: com.sun.faces.mgbean.ManagedBeanCreationException: Cant instantiate class: com.example.Bean. 
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193) 
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102) 
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:405) 
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:267) 
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86) 
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) 
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) 
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
    at com.sun.faces.facelets.el.ELText$ELTextVariable.writeText(ELText.java:217) 
    at com.sun.faces.facelets.el.ELText$ELTextComposite.writeText(ELText.java:141) 
    at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:78) 
    ... 25 more 
Caused by: java.lang.IllegalArgumentException: No! 
    at com.example.Bean.<init>(Bean.java:9) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188) 
    ... 36 more 
1-jun-2010 13:51:06 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.IllegalArgumentException: No! 
    at com.example.Bean.<init>(Bean.java:9) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188) 
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102) 
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:405) 
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:267) 
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86) 
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) 
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) 
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
    at com.sun.faces.facelets.el.ELText$ELTextVariable.writeText(ELText.java:217) 
    at com.sun.faces.facelets.el.ELText$ELTextComposite.writeText(ELText.java:141) 
    at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:78) 
    at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:75) 
    at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:176) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Thread.java:619) 

所以你的问题可能在别的地方。你运行了一个调试器吗?

+0

我已经运行了一个调试器,但我不确定要查找什么,所以目前我没有任何有用的信息。我注意到的一件事是,它似乎没有停止在创建查询的行上。 – bshacklett 2010-06-01 19:08:56

+0

然后你没有运行你认为你正在运行的代码。 – BalusC 2010-06-01 19:18:15

+0

如果一条线在它周围没有分支时可以跳过这条线吗?我想,我必须发布这个bean的内容。今晚我会尽力做到这一点。 – bshacklett 2010-06-02 16:45:45