1

XML 準拠の JSP を記述する場合、入力に応じて異なる HTML タグを生成することは困難です (たとえば、異なるタグを で出力する場合<table>)。

標準的な解決策はiforchooseタグを使用することですが、HTML タグ内でコードを共有すると問題が生じます。例えば

<c:choose>
 <c:when test="${i.tag = 'th'}><th> <!-- 100 lines of code --> </th></c:when>
 <c:when test="${i.tag = 'td'}><td> <!-- 100 lines of code duplicated?! --> </td></c:when>
</c:choose>

XSLT は、標準の XML 構文を使用してタグとその属性<xsl:element>を作成できるタグを提供します。JSPのタグライブラリにそのようなタグはありますか?

4

3 に答える 3

1

このようにすべきではありませんか?

<c:choose>
 <c:when test="${i.tag = 'th'}"><th></c:when>
 <c:when test="${i.tag = 'td'}"><td></c:when>
</c:choose>
 <!-- 100 lines of code --> 
<c:choose>
 <c:when test="${i.tag = 'th'}"></th></c:when>
 <c:when test="${i.tag = 'td'}"></td></c:when>
</c:choose>


マークアップを有効な XML にしたい場合。重複を避けたいすべての Java コードをラップするカスタム タグを使用します。マークアップは次のようになります

<c:choose>
 <c:when test="${i.tag = 'th'}">
  <th>
   <my:customTag anyAttributes="th-related-values-if-any" ... />
  </th>
 </c:when>
 <c:when test="${i.tag = 'td'}">
  <td>
   <my:customTag anyAttributes="td-related-values-if-any" ... />
  </td>
 </c:when>
</c:choose>


または、次のハック ( @Uoooが提案) を使用して、XML バリデーターを渡すことができます。

<c:choose>
 <c:when test="${i.tag = 'th'}"><c:out value="&lt;th&gt%" /></c:when>
 <c:when test="${i.tag = 'td'}"><c:out value="&lt;td&gt%" /></c:when>
</c:choose>
 <!-- 100 lines of code --> 
<c:choose>
 <c:when test="${i.tag = 'th'}"><c:out value="&lt;/th&gt%" /></c:when>
 <c:when test="${i.tag = 'td'}"><c:out value="&lt;/td&gt%" /></c:when>
</c:choose>
于 2013-10-16T12:53:31.823 に答える
0

いいえ。JSP は、ツリーを構築するときにタグを認識する必要があります。これにより、JSP の操作がより堅牢になります。

ただし、使用している JSP の実装に応じて、重複したコードを別の JSP ファイルに分解して含めることで対処できます。

または、100 行のコードを保持する JSP タグを作成することもできます。これを行う価値はおそらくありません。

th最後に、 andを使用する代わりに、tdスタイル ontdを使用して のようにtd見せることができますth。それは要素を次のようにします

<td style="${i.tag == 'th' ? '' : 'font-style: bold; text-align: center;'}">
  100 lines of code
</td>

スタイルが適切でないことはわかっていますが、styleClass代わりに CSS で使用して遊ぶことができます。

于 2013-10-16T12:55:08.300 に答える