2010-08-17 27 views
6

Tôi đã sau bên trong một JSP:JSP - Tôi có thể sử dụng <jsp: attribute> bên trong <c:if> không? Ngoại lệ: "Phải sử dụng jsp: cơ thể để xác định thẻ cơ thể"

<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> 

Như là, tôi nhận được ngoại lệ sau đây:

Must use jsp:body to specify tag body for &lt;MyTag if jsp:attribute is used. 

Nếu tôi loại bỏ các ngoài cùng <c:if> thẻ, nó hoạt động. Có vấn đề với việc sử dụng <jsp:attribute> bên trong một <c:if>? Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn.

+1

Chụp trong bóng tối: thử 'c: if' bên trong' jsp: attribute' thay thế. – BalusC

Trả lời

5

Phần thân của phần tử được xác định ngầm định là phần tử của phần tử tương ứng. Cơ thể cũng có thể được biểu diễn rõ ràng bằng cách sử dụng < jsp: body >. Điều này là bắt buộc nếu một hoặc nhiều thuộc tính < jsp: thuộc tính > xuất hiện trong phần thân của thẻ. Kiểm tra các tham chiếu cho element, attributebody.

Nhưng đó không phải là vấn đề thực sự. Vấn đề là < jsp: thuộc tính > không hoạt động tốt với các thẻ có điều kiện. Thuộc tính < jsp: thuộc tính > đang cố đặt thuộc tính trên thẻ gốc, trong ví dụ của bạn là < c: nếu >.

Bạn có thể sử dụng < c: nếu > bên trong phần tử (như BalusC đề xuất trong bình luận của ông), nhưng điều đó sẽ dẫn đến một thuộc tính với một giá trị rỗng, hoặc bạn có thể đi từ:

<jsp:element ...> 
    <c:if test="${true}"> 
    <jsp:attribute name="extraInlineComplianceJavascript"> 
     .... 
    </jsp:attribute> 
    </c:if> 
</jsp:element> 

(a nhiều tiết):

<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> 

Bạn cũng có thể sử dụng một < c: chọn >. Và tất nhiên nó sẽ không hoạt động tốt với nhiều hơn một thuộc tính: D.

Đề xuất cá nhân của tôi là vứt bỏ thuộc tính <jsp:> và tìm cách khác để đặt thuộc tính của bạn theo cách có điều kiện.

Các vấn đề liên quan