2011-12-12 106 views
0

对缺少代码示例表示歉意,但我不确定我是否可以通过一个简单示例复制该问题。FilterChain抛出javax.servlet.ServletException:IteratedExpression.getItem:索引超出范围

下面的异常现在已经开始出现在我的RichFaces应用程序中。它是查询数据库并在简单表格中显示数据的Web前端。当我的应用程序在链接到命令按钮的bean上完成我的代码时发生问题。它调用FilterChain.doFilter,当你点击弹出面板上的按钮,然后完成bean上的代码,然后我假设试图重新渲染主窗口时引发这个异常。

当一个新的入口指向这个相同的弹出式面板,当按钮被点击时可以正常执行相同的代码时,出现这个问题,但是由于这个新的入口点被添加了,旧的入口点开始抛出这个异常。

我知道这是不可能的,任何人都可以在没有代码的情况下为问题提供答案,但对这些过滤器链的工作原理知之甚少,我甚至不知道从哪里开始寻找,并且想知道是否有人可以指点我这可能会导致我找到解决方案。

服务在WASCE 2.1上运行。

任何帮助将不胜感激。

javax.servlet.ServletException: IteratedExpression.getItem: Index out of Bounds 
at javax.faces.webapp._ErrorPageWriter.throwException(_ErrorPageWriter.java:549) 
at javax.faces.webapp.FacesServlet.handleLifecycleException(FacesServlet.java:293) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:187) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) 
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368) 
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at myPackage.jsfutils.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:45) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at myPacakge.jsfutils.CheckLogonFilter.doFilter(CheckLogonFilter.java:81) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
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.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56) 
at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:406) 
at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) 
at org.apache.geronimo.tomcat.valve.ThreadCleanerValve.invoke(ThreadCleanerValve.java:40) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.RuntimeException: IteratedExpression.getItem: Index out of Bounds 
at javax.servlet.jsp.jstl.core.IteratedExpression.getItem(IteratedExpression.java:75) 
at javax.servlet.jsp.jstl.core.IteratedValueExpression.getValue(IteratedValueExpression.java:60) 
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:64) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:112) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101) 
at javax.faces.component.UIData.getValue(UIData.java:1081) 
at org.ajax4jsf.component.UIDataAdaptor.getValue(UIDataAdaptor.java:1624) 
at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) 
at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) 
at org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:120) 
at org.ajax4jsf.component.UIDataAdaptor.getExtendedDataModel(UIDataAdaptor.java:621) 
at org.ajax4jsf.component.UIDataAdaptor.getRowIndex(UIDataAdaptor.java:311) 
at javax.faces.component._ComponentUtils.idsAreEqual(_ComponentUtils.java:134) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:110) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) 
at javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:449) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:912) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:919) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:919) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:919) 
at org.ajax4jsf.renderkit.RendererUtils.findComponentFor(RendererUtils.java:882) 
at org.ajax4jsf.context.AjaxContextImpl.convertId(AjaxContextImpl.java:395) 
at org.ajax4jsf.context.AjaxContextImpl.addRegionsFromComponent(AjaxContextImpl.java:331) 
at org.ajax4jsf.component.AjaxActionComponent.setupReRender(AjaxActionComponent.java:96) 
at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:60) 
at org.ajax4jsf.component.UIInclude.broadcast(UIInclude.java:170) 
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) 
at org.ajax4jsf.component.AjaxViewRoot.broadcastAjaxEvents(AjaxViewRoot.java:340) 
at org.ajax4jsf.application.AjaxViewHandler.processAjaxEvents(AjaxViewHandler.java:216) 
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:169) 
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41) 
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:182) 
... 29 more 
2011-12-12 16:35:48,342 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception 
java.lang.RuntimeException: IteratedExpression.getItem: Index out of Bounds 
at javax.servlet.jsp.jstl.core.IteratedExpression.getItem(IteratedExpression.java:75) 
at javax.servlet.jsp.jstl.core.IteratedValueExpression.getValue(IteratedValueExpression.java:60) 
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:64) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:112) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101) 
at javax.faces.component.UIData.getValue(UIData.java:1081) 
at org.ajax4jsf.component.UIDataAdaptor.getValue(UIDataAdaptor.java:1624) 
at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) 
at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) 
at org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:120) 
at org.ajax4jsf.component.UIDataAdaptor.getExtendedDataModel(UIDataAdaptor.java:621) 
at org.ajax4jsf.component.UIDataAdaptor.getRowIndex(UIDataAdaptor.java:311) 
at javax.faces.component._ComponentUtils.idsAreEqual(_ComponentUtils.java:134) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:110) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) 
at javax.faces.component._ComponentUtils.findComponent(_ComponentUtils.java:107) 
at javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:449) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:912) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:919) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:919) 
at org.ajax4jsf.renderkit.RendererUtils.findUIComponentBelow(RendererUtils.java:919) 
at org.ajax4jsf.renderkit.RendererUtils.findComponentFor(RendererUtils.java:882) 
at org.ajax4jsf.context.AjaxContextImpl.convertId(AjaxContextImpl.java:395) 
at org.ajax4jsf.context.AjaxContextImpl.addRegionsFromComponent(AjaxContextImpl.java:331) 
at org.ajax4jsf.component.AjaxActionComponent.setupReRender(AjaxActionComponent.java:96) 
at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:60) 
at org.ajax4jsf.component.UIInclude.broadcast(UIInclude.java:170) 
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321) 
at org.ajax4jsf.component.AjaxViewRoot.broadcastAjaxEvents(AjaxViewRoot.java:340) 
at org.ajax4jsf.application.AjaxViewHandler.processAjaxEvents(AjaxViewHandler.java:216) 
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:169) 
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41) 
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:182) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) 
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368) 
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at myPackage.jsfutils.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:45) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at myPackage.jsfutils.CheckLogonFilter.doFilter(CheckLogonFilter.java:81) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
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.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56) 
at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:406) 
at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) 
at org.apache.geronimo.tomcat.valve.ThreadCleanerValve.invoke(ThreadCleanerValve.java:40) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Thread.java:619) 
+0

查看getItem方法的代码,它显示它正试图遍历一个列表对象,它可能是类型集合,迭代器,枚举,映射或字符串,直到我传入方法的索引。这个“originalListObject”是映射到ELContext的ValueExpression上的一个值。那么有没有人有任何想法可能会导致此方法传递索引值不在originalListObject? – James

回答

2

解决的问题是试图重新渲染不存在的部分面板。奇怪的是,它只发生在一个入口点上,在jsp中作为弹出式面板上的确认按钮上的重新显示属性,因此两个入口点都使用相同的按钮和jsp声明。在缺失的部分添加了它,因为它意味着在那里,只能想象它被误删或svn合并。

1

看的根本原因:

java.lang.RuntimeException: IteratedExpression.getItem: Index out of Bounds 
at javax.servlet.jsp.jstl.core.IteratedExpression.getItem(IteratedExpression.java:75) 
at javax.servlet.jsp.jstl.core.IteratedValueExpression.getValue(IteratedValueExpression.java:60) 
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:64) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:112) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101) 
at javax.faces.component.UIData.getValue(UIData.java:1081) 
at org.ajax4jsf.component.UIDataAdaptor.getValue(UIDataAdaptor.java:1624) 
at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) 
at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) 
at org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:120) 
... 

这绝对是不相关的过滤器。该请求恰好是通过过滤器传递的。如果过滤器会导致任何问题,您可能会在堆栈跟踪的第一行看到它。

您的具体问题很可能是由于在后续请求中未保留数据表的适当数据模型而造成的。托管bean显然位于请求范围内,而不是视图范围。为了解决这个问题,你需要把bean放在视图范围内,如果需要的话,检查你的数据模型保存/预加载逻辑。这应该发生在(后)构造函数和/或(动作)侦听器方法中,但肯定不在getter方法中。 getter方法应该只有只有返回数据模型,仅此而已。

如果您仍然使用JSF 1.x,它没有新的JSF 2.x视图范围,则需要将<a4j:keepAlive>添加到引用请求范围的托管bean的页面。

+0

嗨,感谢您的回复, – James

+0

我所有的bean都在会话范围内,我使用的是jsf 1.2。数据模型是使用标记的标准richfaces数据模型。也许我还没有完全明白你的答案,但是如果是这样的话,为什么当我通过新的入口点而不是旧的入口点时,完全相同的jsp页面和托管bean会起作用。在这个弹出面板的新入口点添加之前,旧的也很好。 – James

+0

我也提到过滤器,因为这是最后一个触及我的代码的地方,其余的都来自richfaces使用的各种外部罐子 – James