2011-11-29 45 views
4

這個問題是我用我的應用程序描述的另一個問題,它被描述爲here。我的模型(一個級別)有一個需求列表,其中包含兩個字符串,一個id和一個名稱。該模型是這樣的:帶有列表的jsp中的NumberFormatException

public class Level { 
private String name; 
private int id; 
private int points 
private List<Requirement> requirements; 
    .... 
} 

public class Requirement{ 
    private String name; 
    private String id; 
    .... 
} 

和JSP看起來是這樣的:

<div id="allRequirements"> 
    <c:forEach var="requirement" items="${RequirementList}"> 
     <div class="requirements"> 
      <input type="hidden" value="${requirement.id}" name="id"/> 
      <h2><c:out value="${requirement.name}"/></h2> 
     </div> 
    </c:foreach> 
</div> 

<div id="requiredRequirements"> 
    <c:forEach var="requiredRequirement" items="${level.requirements}"> 
     <div class="requirements"> 
      <input type="hidden" value="${requiredRequirement.id}" name="id"/> 
      <h2><c:out value="${requiredRequirement.name}"/></h2> 
     </div> 
    </c:foreach> 
</div> 

JSP頁面呈現精細,直到我加入了requiredRequirements循環,其中現場拋出一個java.lang.NumberFormatException: For input string: "id"就像一個魅力因爲它試圖將該字符串解析爲一個int。

有沒有人有任何想法爲什麼第一個循環工作,第二個循環不工作?

編輯: 堆棧跟蹤

java.lang.NumberFormatException: For input string: "id" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
at java.lang.Integer.parseInt(Integer.java:447) 
at java.lang.Integer.parseInt(Integer.java:497) 
at javax.el.ListELResolver.coerce(ListELResolver.java:174) 
at javax.el.ListELResolver.getValue(ListELResolver.java:52) 
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985) 
at org.apache.jsp.WEB_002dINF.jsp.createOrEdit_005fLevelBody_jsp._jspx_meth_c_005fout_005f0(createOrEdit_005fLevelBody_jsp.java:648) 
at org.apache.jsp.WEB_002dINF.jsp.createOrEdit_005fLevelBody_jsp._jspx_meth_c_005fforEach_005f1(createOrEdit_005fLevelBody_jsp.java:611) 
at org.apache.jsp.WEB_002dINF.jsp.createOrEdit_005fLevelBody_jsp._jspService(createOrEdit_005fLevelBody_jsp.java:207) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593) 
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530) 
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:927) 
at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:684) 
at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:678) 
at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103) 
at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96) 
at org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:61) 
at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103) 
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659) 
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:337) 
at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:234) 
at org.apache.tiles.jsp.taglib.InsertAttributeTag.render(InsertAttributeTag.java:211) 
at org.apache.tiles.jsp.taglib.RenderTag.doEndTag(RenderTag.java:220) 
at org.apache.jsp.WEB_002dINF.jsp.layout_jsp._jspx_meth_tiles_005finsertAttribute_005f3(layout_jsp.java:411) 
at org.apache.jsp.WEB_002dINF.jsp.layout_jsp._jspService(layout_jsp.java:196) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593) 
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530) 
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:927) 
at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:684) 
at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:678) 
at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103) 
at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96) 
at org.apache.tiles.renderer.impl.TemplateAttributeRenderer.write(TemplateAttributeRenderer.java:44) 
at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103) 
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:659) 
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:678) 
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:633) 
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:322) 
at org.apache.tiles.jsp.taglib.InsertDefinitionTag.renderContext(InsertDefinitionTag.java:66) 
at org.apache.tiles.jsp.taglib.InsertTemplateTag.render(InsertTemplateTag.java:81) 
at org.apache.tiles.jsp.taglib.RenderTag.doEndTag(RenderTag.java:220) 
at org.apache.jsp.WEB_002dINF.jsp.createOrEdit_005fLevel_jsp._jspx_meth_tiles_005finsertDefinition_005f0(createOrEdit_005fLevel_jsp.java:87) 
at org.apache.jsp.WEB_002dINF.jsp.createOrEdit_005fLevel_jsp._jspService(createOrEdit_005fLevel_jsp.java:60) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:306) 
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:323) 
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1719) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:619) 

感謝

回答

7

這意味着${requiredRequirement}實際上List一個實例。在EL中,List只能由整數索引訪問。這可以有2個原因:

  1. Requirement類實際上實現List或擴展子類之一。
  2. ${level}${level.requirements}實際上並不指代您認爲它的代碼。

由於快速調試,嘗試將它們打印普通的檢查,如果他們toString()方法返回你所期望的:

<p>Level: ${level}</p> 
<p>Level requirements: ${level.requirements}</p> 

和循環

<p>Required requirement: ${requiredRequirement}</p> 
+0

內打印出所有的調試代碼正確的東西。而我的要求沒有實現任何東西。 –

+0

好了,該顯示堆棧跟蹤了。編輯您的問題以包含它。 – BalusC

+0

添加了堆棧跟蹤 –