jsp
  • jsp-tags
  • jspinclude
  • 2010-08-17 9 views 6 likes 
    6

    Ich habe folgendes in einem JSP: „Körper -Tags angeben muss jsp verwenden“:JSP - Kann ich <jsp: attribute> innerhalb von <c:if> verwenden? Ausnahme:

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

    Wie ist, erhalte ich die folgende Ausnahme:

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

    Wenn ich das entfernen äußerste <c:if> Tags, es funktioniert. Gibt es ein Problem mit <jsp:attribute> in einem <c:if>? Jede Hilfe wäre willkommen. Vielen Dank.

    +1

    Ein Shoot im Dunkeln: versuchen Sie 'c: if' innerhalb von' jsp: attribute' statt dessen. – BalusC

    Antwort

    5

    Der Rumpf eines Elements wird implizit als der Körper des jeweiligen Elements definiert. Der Körper kann auch explizit mit < jsp: body > dargestellt werden. Dies ist erforderlich, wenn ein oder mehrere Elemente < jsp: attribute > im Textkörper des Tags angezeigt werden. Überprüfen Sie die Referenzen für element, attribute und body.

    Aber das ist nicht das eigentliche Problem. Das Problem ist < Jsp: Attribut > spielt nicht gut mit bedingten Tags. Das < jsp: Attribut > versucht, das Attribut für sein übergeordnetes Tag festzulegen, das in Ihrem Beispiel < c: if > ist.

    könnten Sie < c: wenn > innerhalb des Elements (wie BalusC in seinem Kommentar vorgeschlagen), aber das wird in einem ein Attribut mit einem leeren Wert führen, oder Sie können gehen aus:

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

    zu (eine ausführlichere):

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

    könnten Sie auch eine < c: wählen >. Und natürlich wird es mit mehr als einem Attribut nicht gut funktionieren: D.

    Mein persönlicher Vorschlag wäre, die < jsp: Attribut > wegwerfen und finden Sie eine andere Möglichkeit, Ihre Attribute bedingt einzustellen.

    Verwandte Themen