什么是使用JSPX有条件地打印html属性的正确方法?
这些都在p标签上引发验证错误:
/* first try */ <p ${true ? 'name="foobar"' : ''}>hello</p> /* second one */ <c:set var="somevar" scope="page"> <c:if test="${true}"> name="foobar" </c:if> </c:set> <p ${somevar}>hello</p>
元素类型“ p”之后必须是属性规范“>”或“ />”。在org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
编辑:附加完整代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <div xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" xmlns:form="urn:jsptagdir:/WEB-INF/tags/form" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:spring="http://www.springframework.org/tags" version="2.0"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <jsp:output omit-xml-declaration="yes"/> <p ${true ? 'name="foobar"' : ''}>hello</p> </div>
问题在于Jasper会在处理EL之前尝试验证JSP的格式正确性。
发生这种情况是因为您的文件据称具有JSPX扩展名意味着它是一个JSP文档。和JSP规范说:
标识为JSP文档的文件不是格式正确,可识别名称空间的XML文档是翻译时错误。
我找不到任何指示Jasper禁用XML格式验证的方法。
如Tomcat文档中所述,用于预编译JSP文件的Ant任务具有validateXml参数。但是它只是跳过对有效XML的检查,而不是对格式正确的XML的检查。
validateXml
因此,您可以选择将文件重命名为JSP或添加<is-xml>false</is-xml>到web.xml,或者遵循@damo_inc的建议。
<is-xml>false</is-xml>
web.xml