2015-11-13 54 views
1

我得到這個JSP錯誤和它沒有任何意義,因爲語法在我的測試代碼看起來不錯:JSP錯誤處理自定義標記文件

org.apache.jasper.JasperException: /tests/jsptag1.jsp (line: 12, column: 2) Unterminated <my:item tag 
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41) 
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:275) 
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:91) 
org.apache.jasper.compiler.Parser.parseJspAttributeAndBody(Parser.java:1031) 
org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:999) 
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1276) 
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1455) 
org.apache.jasper.compiler.Parser.parse(Parser.java:139) 
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227) 
org.apache.jasper.compiler.ParserController.parse(ParserController.java:100) 
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:356) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:336) 
org.apache.jasper.compiler.Compiler.compile(Compiler.java:323) 
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

這是我的測試jsptag1.jsp:

<%@taglib prefix="my" tagdir="/WEB-INF/tags" %> 


<% request.setAttribute("items", new int[]{1, 2, 3}); %> 
<my:item> 
    <jsp:attribute name="header"> 
     <br>This is the header <br> 
    </jsp:attribute> 
    <jsp:body> 
     value: 
    </jsp:body> 
    <jsp:attribute name="footer"> 
     <br>This is footer<br> 
    </jsp:attribute> 
</my:item> 

這是我item.tag文件:

<%@tag body-content="scriptless" %> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@attribute name="header" fragment="true" %> 
<%@attribute name="footer" fragment="true" %> 

<jsp:invoke fragment="header"/> 
<c:forEach items="${requestScope['items']}" var="thisItem"> 
    <jsp:doBody/> 
    Item: ${thisItem} 
</c:forEach> 
<jsp:invoke fragment="footer"/> 

我真的不明白爲什麼這個錯誤被顯示出來。我似乎已經打開和關閉了所有的標籤。有人明白爲什麼會出現這個錯誤嗎?

回答

2

當您調用自定義標籤時,將所有jsp:attribute元素放在jsp:body元素之前。具體而言,jsptag1.jsp中的my:item元素應該按照該順序包含標題元素,頁腳元素和body元素。

儘管規範沒有在信息文本中指出這一點,但規範中的JSP語法需要此順序。

+0

謝謝,它按照你的建議工作。 –

+0

這是我最近遇到的最易於使用的錯誤消息。感謝這個答案! – user11153