2

HTML入力コントロールのラッパーであるカスタムJSPタグタグファイルがあります-ドロップダウンなど-

<mytag:dropdown table="customer_master" style="display:block;" class="dblist"/>

ここで、「テーブル」はタグの宣言された属性であり、スタイル、クラスは動的属性です。

これを次のように別のタグでラップしたいと思います -

<mytag:search-filter type="dropdown" validate="true" table="mytable" style="display:block;" class="dblist">

次のように mytag:search-filter を実装しようとしています -

<@tag .... dynamic-attributes="dynattrs">
<@attribute name="type" required="true">
<c:if test="${type == 'dropdown'}">
     <mytag:dropdown table="$dynattrs['table']">
</c:if>

外側のタグには独自の宣言された属性のセットがあり、内側のタグの属性を動的属性として外側のタグに渡す必要があります。外側のタグは動的属性を内側のタグに渡します。

私は次のことを試しましたが、どれもうまくいかないようです-

<c:set var="attrs">
<c:forEach items="${dynattrs}" var="a">
     ${a.key}="${a.value}"
</c:forEach>
</c:set>
<mytag:dropdown table="$dynattrs['table']" ${attrs}/> 

上記は「Unterminated Tag %lt;mytag:dropdown」エラーを返します

<mytag:dropdown table="$dynattrs['table']">
<c:forEach items="${dynattrs}" var="a">
     <jsp:attribute name="${a.key}" trim="true">${a.value}</jsp:attribute>
</c:forEach>
</mytag:dropdown>

** 上記はエラーをスローしませんが、内部タグ内の属性値は常に空です。

私が持っている制約:

a) タグファイルに固執したいので、TagSupport の Java クラス実装を使用したくありません。

b) 可能な限り、内部タグの実装を変更したくありません。これは、現在の形式で広く使用されており、それを変更すると手直しに多大な労力がかかるためです。

私がやろうとしていることを達成することは可能ですか?

上記が機能しないのはなぜですか(特に2番目のもの)?

4

0 に答える 0