2010-08-17 6 views
6

Ho il seguente all'interno di una JSP:JSP - Posso usare <jsp: attributo> all'interno di <c:if>? Eccezione: "è necessario utilizzare jsp: il corpo di specificare corpo tag"

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

Come è, ottengo la seguente eccezione:

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

Se rimuovo il tag più esterni <c:if>, funziona. C'è un problema con l'utilizzo di <jsp:attribute> all'interno di uno <c:if>? Qualsiasi aiuto sarebbe apprezzato. Grazie.

+1

Una ripresa al buio: prova 'c: if' all'interno di' jsp: attribute' invece. – BalusC

risposta

5

Il corpo di un elemento è definito implicitamente come il corpo del rispettivo elemento. Il corpo può anche essere rappresentato esplicitamente usando < jsp: body >. È necessario se uno o più elementi < jsp: attributo > vengono visualizzati nel corpo del tag. Verifica i riferimenti per element, attribute e body.

Ma questo non è il vero problema. Il problema è < jsp: l'attributo > non funziona bene con i tag condizionali. L'attributo <: attributo > sta tentando di impostare l'attributo sul suo tag principale, che nell'esempio è < c: se >.

Si potrebbe utilizzare < c: se > all'interno dell'elemento (come BalusC suggerito nel suo commento), ma che si tradurrà in un un attributo con un valore vuoto, o si potrebbe andare da:

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

a (a più prolisso):

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

Si potrebbe anche usare un < c: scegliere >. E ovviamente non funzionerà bene con più di un attributo: D.

Il mio suggerimento personale sarebbe quello di buttar via il jsp <: attributo > e trovare un altro modo per impostare in modo condizionale i propri attributi.