2

我有一个自定义 JSP 标记标记文件,它是 HTML 输入控件的包装器 - 下拉列表等,就像这样 -

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

以上给出了“未终止的标记 %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>

** 上面没有抛出任何错误,但是inner标签里面的属性值总是空的。

我有的约束:

a) 我想坚持标记文件,不想使用 TagSupport 的 Java 类实现。

b) 尽可能不要更改内部标签的实现,因为它以其当前形式被广泛使用,并且对其进行任何更改都意味着返工的巨大努力。

是否有可能实现我想要做的事情?

为什么以上不起作用(尤其是第二个)?

4

0 回答 0