Spring boot + taglibs + java.util.NoSuchElementException

时间:2015-03-05 10:39:59

标签: spring-boot taglib apache-tiles

我正在使用带有web mvc磁贴的Spring Boot。还使用Bootsrap CSS作为前端

我有一个名为basic.jsp的主布局页面为

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
 <html>
  <head>
    <title><tiles:getAsString name="title" /></title>
  </head>
 <body>
    <!-- Header -->
    <tiles:insertAttribute name="header" />
    <!-- Body -->
    <tiles:insertAttribute name="body" />
    <!-- Footer -->
    <tiles:insertAttribute name="footer" />
 </body>
 </html>

和tiles.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
   "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
   "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

<!-- Templates -->

<definition name="layout.basic" template="/pages/layout/basic.jsp">
    <put-attribute name="header" value="/pages/jsps/header.jsp" />
    <put-attribute name="leftmenu" value="/pages/jsps/lmenu.jsp" />
    <put-attribute name="body" value="" />
    <put-attribute name="footer" value="/pages/jsps/footer.jsp" />
</definition>

<!-- Pages -->  

<definition name="home" extends="layout.basic">
    <put-attribute name="body" value="/WEB-INF/tiles/view/home/home.jsp" />
</definition>

<definition name="greet" extends="layout.basic">
    <put-attribute name="body" value="/WEB-INF/tiles/view/home/register.jsp"                                                                         />
</definition>

</tiles-definitions>

我想将spring form taglib包含在register.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<div>
 <div class="col-md-9 personal-info">

   <form:form method="POST" id="frm" class="form-horizontal" role="form"         commandName="box" action="Register">

      <div class="form-group">
        <label class="col-lg-3 control-label">Box Id:</label>
        <div class="col-lg-8">
          <form:input class="form-control" path="strBoxId" type="text"         placeholder="Box Id"></form:input>
        </div>
      </div>
      <div class="form-group">
        <label class="col-lg-3 control-label">Box Name:</label>
        <div class="col-lg-8">
          <form:input class="form-control" type="text" path="strBoxName"      value="" placeholder="Box Name"></form:input>
        </div>
      </div>          
       <div class="form-group">
        <label class="col-lg-3 control-label">Address:</label>
        <div class="col-lg-8">
          <form:textarea class="form-control" placeholder="Address"      path="strAddress"></form:textarea>
        </div>
      </div>

       <div class="form-group">
        <label class="col-md-3 control-label"></label>
        <div class="col-md-8">
          <input type="submit" class="btn btn-primary" id="register"      value="Register" onclick="callMe()">
          <span></span>
          <input type="reset" class="btn btn-default" value="Cancel">
        </div>
      </div>
    </form:form>
  </div>
</div>

当我在不包含taglib的情况下运行应用程序时,它正在显示表单,但是当我在tag.jsp中包含taglib时,它会在cosole中抛出错误,并在浏览器中抛出Whitelabel错误页面。显示的错误是

2015-03-05 15:23:45.296 ERROR 8056 --- [nio-8080-exec-8] o.a.c.c.C.[. [localhost].[/].[jsp]        : Servlet.service() for servlet jsp threw exception

    java.util.NoSuchElementException: null
    at java.util.ArrayList$Itr.next(Unknown Source)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.getJspAttribute(Validator.java:1385)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1262)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:876)
    at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1538)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
    at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
    at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:895)
    at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1538)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
    at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
    at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2435)
    at org.apache.jasper.compiler.Node$Root.accept(Node.java:474)
    at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
    at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1841)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:604)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:543)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:954)
    at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:688)
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:682)
    at org.apache.tiles.request.jsp.JspRequest.doInclude(JspRequest.java:123)
    at org.apache.tiles.request.AbstractViewRequest.dispatch(AbstractViewRequest.java:47)
    at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:47)
    at org.apache.tiles.request.render.ChainedDelegateRenderer.render(ChainedDelegateRenderer.java:68)
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259)
    at org.apache.tiles.template.InsertAttributeModel.renderAttribute(InsertAttributeModel.java:188)
    at org.apache.tiles.template.InsertAttributeModel.execute(InsertAttributeModel.java:132)
    at org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:299)
    at org.apache.jsp.pages.layout.basic_jsp._jspx_meth_tiles_005finsertAttribute_005f2(basic_jsp.java:198)
    at org.apache.jsp.pages.layout.basic_jsp._jspService(basic_jsp.java:112)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
    at org.apache.tiles.request.servlet.ServletRequest.forward(ServletRequest.java:265)
    at org.apache.tiles.request.servlet.ServletRequest.doForward(ServletRequest.java:228)
    at org.apache.tiles.request.AbstractClientRequest.dispatch(AbstractClientRequest.java:57)
    at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:47)
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259)
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:397)
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238)
    at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221)
    at org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59)
    at org.springframework.web.servlet.view.tiles3.TilesView.renderMergedOutputModel(TilesView.java:114)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:8 37)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1720)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1679)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

我不知道哪里出了问题。请帮忙:(

1 个答案:

答案 0 :(得分:1)

天啊!我浪费了3个小时才找到解决方案。感谢#guido&#39;的回复。 Spring boot taglibs

我刚刚将我的春季启动版本更改为1.2.2.RELEASE并且它工作了!!!