小编典典

JSPX中的条件HTML属性

jsp

什么是使用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>

阅读 366

收藏
2020-06-10

共1个答案

小编典典

问题在于Jasper会在处理EL之前尝试验证JSP的格式正确性。

发生这种情况是因为您的文件据称具有JSPX扩展名意味着它是一个JSP文档。和JSP规范说:

标识为JSP文档的文件不是格式正确,可识别名称空间的XML文档是翻译时错误。

我找不到任何指示Jasper禁用XML格式验证的方法。

Tomcat文档中所述,用于预编译JSP文件的Ant任务具有validateXml参数。但是它只是跳过对有效XML的检查,而不是对格式正确的XML的检查。

因此,您可以选择将文件重命名为JSP或添加<is-xml>false</is-xml>web.xml,或者遵循@damo_inc的建议。

2020-06-10