sublist index out of bound exception

℡╲_俬逩灬. 提交于 2019-12-31 02:54:13

问题


Whenever I am running my xhtml. It is giving me the following exception. The value of statusindex object is 5. I am using JQuery for lazy scrolling,so when my xhml page getMoreStatusList calls getMoreStatusList function, it is giving me an index out of bound exception. There are 26 status updates in the database so index out of bound exception makes no sense to me.

1) Code

public List<Status> getMoreStatusList() {

    FacesContext context = FacesContext.getCurrentInstance();
    HttpSession session = (HttpSession) context.getExternalContext()
            .getSession(false);
    User user = (User) session.getAttribute("userdet");
    Query query = em.createQuery("SELECT s FROM Status s WHERE s.email='"
            + user.getEmail() + "' ORDER BY s.timeMillis desc",
            Status.class);
    List<Status> results = query.getResultList();
    Query query1 = em.createQuery("SELECT f FROM Friend f WHERE f.email='"
            + user.getEmail() + "'", Friend.class);
    List<Friend> results1 = query1.getResultList();
    Iterator<Friend> it = results1.listIterator();
    while (it.hasNext()) {
        String email = it.next().getFriendEmail();
        Query query2 = em.createQuery(
                "SELECT s FROM Status s WHERE s.email='" + email
                        + "' ORDER BY s.timeMillis desc", Status.class);
        List<Status> results2 = query2.getResultList();
        results.addAll(results2);

    }
    Collections.sort(results);
    int index = (int) session.getAttribute("statusindex");
    System.out.println(index);
    results = results.subList(index,index+5);
    session.setAttribute("statusindex", index + 5);
    return results;

}

2) Exception

Mar 02, 2013 9:31:58 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/FreeBird_v.6] threw exception [/getMoreStatusList.xhtml @120,43 test="#{p.videostatus!=null}" /getMoreStatusList.xhtml @120,43 test="#{p.videostatus!=null}": /getMoreStatusList.xhtml @14,60 items="#{statusBean.moreStatusList}": Error reading 'moreStatusList' on type com.bean.StatusBean] with root cause
java.lang.IndexOutOfBoundsException: toIndex = 30
    at java.util.SubList.<init>(Unknown Source)
    at java.util.RandomAccessSubList.<init>(Unknown Source)
    at java.util.AbstractList.subList(Unknown Source)
    at java.util.Vector.subList(Unknown Source)
    at com.bean.StatusBean.getMoreStatusList(StatusBean.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:71)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
    at com.sun.faces.facelets.tag.jstl.core.IndexedValueExpression.getValue(IndexedValueExpression.java:89)
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:68)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:147)
    at org.apache.el.parser.AstNotEqual.getValue(AstNotEqual.java:38)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
    at com.sun.faces.facelets.tag.TagAttributeImpl.getObject(TagAttributeImpl.java:326)
    at com.sun.faces.facelets.tag.TagAttributeImpl.getBoolean(TagAttributeImpl.java:133)
    at com.sun.faces.facelets.tag.jstl.core.IfHandler.apply(IfHandler.java:88)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:94)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:131)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:162)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
    at com.sun.faces.facelets.tag.jstl.core.ForEachHandler.apply(ForEachHandler.java:214)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:131)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:162)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:114)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:94)
    at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:89)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:94)
    at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:79)
    at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:148)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:734)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:96)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

回答1:


The message says that toIndex is 30. That means that statusindex is not 5, as you believe it is, but 25:

java.lang.IndexOutOfBoundsException: toIndex = 30

Side note, you should use named parameters in your queries instead of String concatenation to pass parameters. Your code is vulnerable to SQL injection attacks. It will also fail if the email address happens to contain a single quote.




回答2:


List.subList()'s documentation is very clear:

Throws: IndexOutOfBoundsException - for an illegal endpoint index value (fromIndex < 0 || toIndex > size || fromIndex > toIndex)

In your case, toIndex > size:

java.lang.IndexOutOfBoundsException: toIndex = 30



回答3:


results = results.subList(index,index+5);

So it would do:

results.subList(25,30); if passed 25, hence the error.



来源:https://stackoverflow.com/questions/15176584/sublist-index-out-of-bound-exception

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!