今天遇到的奇葩问题:Validation error messages from TagLibraryValidator for fmt

HTTP Status 500 - <h3>Validation error messages from TagLibraryValidator for fmt in /alpha/vedio_list.jsp</h3><p>null: org.xml.sax.SAXParseException; lineNumber: 1279; columnNumber: 8; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x0)。</p><h3>Validation error messages from TagLibraryValidator for c in /alpha/vedio_list.jsp</h3><p>null: org.xml.sax.SAXParseException; lineNumber: 1279; columnNumber: 8; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x0)。</p>


type Exception report

message <h3>Validation error messages from TagLibraryValidator for fmt in /alpha/vedio_list.jsp</h3><p>null: org.xml.sax.SAXParseException; lineNumber: 1279; columnNumber: 8; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x0)。</p><h3>Validation error messages from TagLibraryValidator for c in /alpha/vedio_list.jsp</h3><p>null: org.xml.sax.SAXParseException; lineNumber: 1279; columnNumber: 8; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x0)。</p>

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for fmt in /alpha/vedio_list.jsp</h3><p>null: org.xml.sax.SAXParseException; lineNumber: 1279; columnNumber: 8; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x0)。</p><h3>Validation error messages from TagLibraryValidator for c in /alpha/vedio_list.jsp</h3><p>null: org.xml.sax.SAXParseException; lineNumber: 1279; columnNumber: 8; 在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x0)。</p>
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:56)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:445)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:75)
	org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1901)
	org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1847)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
	org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
在 JSP 页面中使用 JSTL 标签库时,如果遇到 `TagLibraryValidator` 的验证错误,提示在 `<c:choose>` 标签内部存在非法文本(如 `&#39;o...&#39;`),通常是因为在 `<c:choose>` 标签的内部包含了非 JSTL 标签的文本内容,或者在 JSTL 标签之间存在空白字符、换行符等非法文本内容。 ### 错误原因 1. **非法文本内容**:`<c:choose>` 标签内部只能包含 `<c:when>`、`<c:otherwise>` 等子标签,任何其他文本内容(包括空格、换行符)都会被视为非法文本[^1]。 2. **JSTL 版本不兼容**:某些版本的 JSTL 对标签内部的空白字符和非法文本的处理方式不同,可能导致验证错误。 3. **TLD 文件配置问题**:`<c:choose>` 标签的 TLD 文件中定义了严格的验证规则,如果页面中存在不符合规则的内容,会触发验证错误[^1]。 ### 解决方法 1. **确保 `<c:choose>` 标签内部仅包含合法的子标签**: - 检查 `<c:choose>` 标签内部是否有空白字符、换行符或其他非 JSTL 标签的内容。 - 可以通过移除 `<c:choose>` 标签内的空白字符和换行符来解决问题。 ```jsp <c:choose> <c:when test="${condition1}"> Content for condition1 </c:when> <c:otherwise> Default content </c:otherwise> </c:choose> ``` 如果 `<c:choose>` 标签内部存在多余的空格或换行符,可以将其删除或注释掉: ```jsp <c:choose><%-- --%><c:when test="${condition1}"> Content for condition1 </c:when><%-- --%><c:otherwise> Default content </c:otherwise><%-- --%></c:choose> ``` 2. **检查 JSTL 版本**: - 确保使用的 JSTL 版本与当前的 JSP 和 Servlet 规范兼容。如果使用的是较旧的 JSTL 版本(如 1.0 或 1.1),建议升级到 JSTL 1.2 或更高版本[^1]。 - 在 `pom.xml`(如果使用 Maven)中添加或更新 JSTL 依赖: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> ``` 3. **验证 TLD 文件配置**: - 检查 `c.tld` 文件中 `<c:choose>` 标签的定义,确保其 `body-content` 属性设置为 `scriptless` 或 `tagdependent`,而不是 `empty`。 - 示例配置: ```xml <tag> <name>choose</name> <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class> <body-content>scriptless</body-content> </tag> ``` 4. **使用 JSP 预编译工具**: - 使用 JSP 预编译工具(如 `jspc`)对 JSP 页面进行预编译,可以帮助发现潜在的语法错误和标签使用问题。 ### 示例代码 以下是一个完整的 `<c:choose>` 标签示例,确保其内部没有非法文本: ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:choose> <c:when test="${user.role == &#39;admin&#39;}"> Welcome, Administrator! </c:when> <c:when test="${user.role == &#39;user&#39;}"> Welcome, User! </c:when> <c:otherwise> Welcome, Guest! </c:otherwise> </c:choose> ``` ### 相关问题 1. 如何在 JSP 页面中正确使用 `<c:if>` 标签? 2. JSTL 核心标签库中 `<c:choose>` 和 `<c:when>` 的作用是什么? 3. 如何解决 JSP 页面中出现的 `TagLibraryValidator` 验证错误? 4. JSTL 标签库的版本兼容性问题有哪些? 5. 如何在 Maven 项目中添加 JSTL 依赖?
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值