6

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>タグを削除すると、機能します。<jsp:attribute>内部での使用に問題はあり<c:if>ますか? どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

5

要素の本体は、それぞれの要素の本体として暗黙的に定義されます。本文は、<jsp:body> を使用して明示的に表すこともできます。これは、タグの本体に 1 つ以上の <jsp:attribute> 要素が表示される場合に必要です。elementattributebodyの参照をチェックアウトします。

しかし、それは本当の問題ではありません。問題は、 <jsp:attribute> が条件付きタグでうまく機能しないことです。<jsp:attribute> は、親タグに属性を設定しようとしています。例では <c:if> です。

要素内で <c:if> を使用することもできますが (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:choose> を使用することもできます。そしてもちろん、複数の属性ではうまく機能しません:D.

私の個人的な提案は、 <jsp:attribute> を捨てて、条件付きで属性を設定する別の方法を見つけることです。

于 2010-08-21T20:42:42.160 に答える