6

我在 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 &lt;MyTag if jsp:attribute is used.

如果我删除最外面的<c:if>标签,它会起作用。<jsp:attribute>在a 中使用有问题<c:if>吗?任何帮助,将不胜感激。谢谢。

4

1 回答 1

5

元素的主体被隐式定义为相应元素的主体。主体也可以使用 <jsp:body> 显式表示。如果一个或多个 <jsp:attribute> 元素出现在标记的正文中,则这是必需的。检查元素属性正文的引用。

但这不是真正的问题。问题是 <jsp:attribute> 不能很好地处理条件标签。<jsp:attribute> 试图在其父标记上设置属性,在您的示例中为 <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> 并找到另一种有条件地设置属性的方法。

于 2010-08-21T20:42:42.160 回答