我有一个自定义 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) 尽可能不要更改内部标签的实现,因为它以其当前形式被广泛使用,并且对其进行任何更改都意味着返工的巨大努力。
是否有可能实现我想要做的事情?
为什么以上不起作用(尤其是第二个)?