JSP 自定义标记文件错误
JSP error with custom tag file
我收到这个 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"/>
我真的不明白为什么会出现这个错误。我似乎打开和关闭了所有标签。有人知道为什么会显示此错误吗?
调用自定义标记时,将所有 jsp:attribute
元素放在 jsp:body
元素之前。具体来说,jsptag1.jsp
中的 my:item
元素应依次包含页眉元素、页脚元素和正文元素。
虽然规范未在信息文本中指出这一点,但规范中的 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"/>
我真的不明白为什么会出现这个错误。我似乎打开和关闭了所有标签。有人知道为什么会显示此错误吗?
调用自定义标记时,将所有 jsp:attribute
元素放在 jsp:body
元素之前。具体来说,jsptag1.jsp
中的 my:item
元素应依次包含页眉元素、页脚元素和正文元素。
虽然规范未在信息文本中指出这一点,但规范中的 JSP 语法需要此顺序。