我在JSP中有以下内容:
<c:if test="${true}">
<jsp:attribute name="extraInlineComplianceJavascript">
window.isSummaryComplianceLinkVisible = '${TabList.isSummaryComplianceLinkVisible}';
window.isDetailComplianceLinkVisible = '${TabList.isDetailComplianceLinkVisible}';
window.complianceSummaryReportTag = '${helper.complianceSummaryReportTag}';
window.complianceDetailReportTag = '${helper.complianceReportTag}';
</jsp:attribute>
</c:if>
原样,我得到以下异常:
Must use jsp:body to specify tag body for <MyTag if jsp:attribute is used.
如果我删除最外面的<c:if>
标记,它就可以了。在<jsp:attribute>
中使用<c:if>
是否有问题?任何帮助,将不胜感激。感谢。
答案 0 :(得分:5)
元素的主体被隐式地定义为相应元素的主体。也可以使用&lt; jsp:body&gt;明确表示正文。如果一个或多个&lt; jsp:attribute&gt;元素出现在标记的正文中。查看element,attribute和body的参考文献。
但这不是真正的问题。问题是&lt; jsp:attribute&gt;条件标签不能很好地发挥作用。 &lt; jsp:属性&gt;正在尝试在其父标记上设置属性,在您的示例中该属性为&lt; c:if&gt;。
您可以使用&lt; c:if&gt;在元素内部(正如BalusC在他的评论中所建议的那样),但是这将导致一个具有空值的属性,或者你可以从:
<jsp:element ...>
<c:if test="${true}">
<jsp:attribute name="extraInlineComplianceJavascript">
....
</jsp:attribute>
</c:if>
</jsp:element>
(更详细):
<c:if test="${true}">
<jsp:element ...>
<jsp:attribute name="extraInlineComplianceJavascript">
....
</jsp:attribute>
</jsp:element>
</c:if>
<c:if test="${false}">
<jsp:element ...>
<!-- no attribute for false -->
</jsp:element>
</c:if>
您还可以使用&lt; c:choose&gt;。当然,它不适用于多个属性:D。
我的个人建议是抛弃&lt; jsp:attribute&gt;并找到另一种有条件地设置属性的方法。