2011-12-12 58 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