使用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”必须后跟属性规范,“&gt;”或“/&gt;”。 在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>
答案 0 :(得分:3)
问题在于Jasper在处理EL之前尝试验证JSP的良好形式。
这是因为你的文件所谓的JSPX扩展意味着它是一个JSP文档。 JavaServer Pages Specification说:
对于标识为JSP的文件,它是转换时错误 文档不是格式良好的,名称空间感知的XML文档。
我找不到任何方法来指示Jasper禁用XML良好形式验证。
如Tomcat docs中所述,预编译JSP文件的Ant任务已获得validateXml
参数。但它只是跳过valid XML的检查,而不是well-formed XML。
因此,您可以选择将文件重命名为JSP,或将<is-xml>false</is-xml>
添加到web.xml
,或者关注@ damo_inc的建议。
答案 1 :(得分:1)
可能有点简单,但应该有效:
<c:if test="${true}">
<p name="foobar">hello</p>
</c:if>
<c:if test="!${true}">
<p>Hello</p>
</c:if>
编辑:
测试了这个:
<p ${true ? 'name="true"' : 'name="false"'}>hello</p>
......它运作正常。你的网页肯定有问题。
编辑2:
这样可行:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:c="http://java.sun.com/jsp/jstl/core" >
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<p ${true ? 'name="foobar"' : ''}>hello</p>
</div>
某些xmnls属性出了问题。
答案 2 :(得分:0)
我确实找到了办法。
我知道自从被问到这个问题以来已经过了一段时间,但我认为有人可以从我的发现中受益。
我认为 是一个完整的黑客,但它确实有效。
看看这个:
<div id="something1" <c:if test="true">class="hide"</c:if>>
something2
</div>
<
和>
标记未经过验证。
浏览器的源代码显示:
<div id="something1" class="hide">
something2
</div>
从here获得了这个想法。
希望有人发现它有用