当前位置 : 主页 > 编程语言 > java >

JSP – 我可以在里面使用吗?例外:“必须使用jsp:body指定标签主体”

来源:互联网 收集:自由互联 发布时间:2021-06-25
我在JSP中有以下内容: c:if test="${true}"jsp:attribute name="extraInlineComplianceJavascript"window.isSummaryComplianceLinkVisible = '${TabList.isSummaryComplianceLinkVisible}';window.isDetailComplianceLinkVisible = '${TabList.isDe
我在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>是否有问题?在< 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>并找到另一种有条件地设置属性的方法.

网友评论