2010-08-17 70 views
6

我已经在一个JSP中以下内容:JSP - 我可以在<c:if>内使用<jsp:attribute>吗?例外:“必须用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>标签,它的工作原理。在<c:if>内使用<jsp:attribute>有问题吗?任何帮助,将不胜感激。谢谢。

+1

在黑暗中拍摄:改为在'jsp:attribute'内尝试'c:if'。 – BalusC 2010-08-19 18:22:59

回答

5

元素的主体被隐式定义为相应元素的主体。身体也可以使用< jsp:body >明确表示。如果一个或多个< jsp:attribute >元素出现在标签的主体中,则这是必需的。查看element,attributebody的参考资料。

但这不是真正的问题。问题是< jsp:属性>与条件标签不能很好地协作。 < jsp:attribute >正尝试在其父标记上设置该属性,在您的示例中该属性为< c:if >。

你可以使用< C:如果>里面的元素(如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:选择>。当然,如果有多个属性,它将无法正常工作:D。

我个人的建议是扔掉< jsp:属性>并找到另一种有条件地设置属性的方法。

相关问题