2010-08-17 44 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:屬性>並找到另一種有條件地設置屬性的方法。

相關問題