我在JSP中有以下内容: c:if test="${true}"jsp:attribute name="extraInlineComplianceJavascript"window.isSummaryComplianceLinkVisible = '${TabList.isSummaryComplianceLinkVisible}';window.isDetailComplianceLinkVisible = '${TabList.isDe
<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>内?任何帮助,将不胜感激.谢谢.
元素的主体被隐式地定义为相应元素的主体.也可以使用< jsp:body>明确表示正文.如果一个或多个< jsp:attribute>元素出现在标记的正文中.查看 element, attribute和 body的参考文献.但这不是真正的问题.问题是< jsp:attribute>条件标签不能很好地发挥作用. < jsp:属性>正在尝试在其父标记上设置属性,在您的示例中,该标记为< c:if>.
您可以使用< c:if>在元素内部(如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>
您还可以使用< c:choose>.当然,它不适用于多个属性:D.
我的个人建议是扔掉< jsp:attribute>并找到另一种有条件地设置属性的方法.