如何在JSP标记文件中使动态属性起作用?

时间:2009-04-17 23:49:54

标签: java jsp tags dynamic-attributes

因此,根据我的JSP参考书,以及我可以在网上找到的所有其他参考资料,我应该可以做类似的事情:

<%@ tag dynamic-attributes="dynamicAttributesVar" %>

然后当有人使用我未在属性指令中定义的属性时,我应该能够从“dynamicAttributesVar”地图访问该属性:

<%= dynamicAttributesVar.get("someUnexpectedAttribute") %>

但是,这根本不起作用;我尝试时只得到“dynamicAttributesVar无法解析”的错误。

现在,我确实发现(通过查看生成的标记Java类),我可以通过执行以下操作来“破解”正在运行的动态属性变量:

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>

现在,除非我在tag指令上使用dynamic-attributes参数,否则该hack不起作用,所以看起来该参数正在执行某事

但我想知道的是,我怎样才能让它为其他每个JSP用户做它做的事情?

2 个答案:

答案 0 :(得分:5)

试图获得回答四年前问题的徽章。

我也有这个问题,并在O'Reilly遇到了一些帮助,使用JSTL而不是scriptlet。

原始海报本可以使用此代码获取所有键/值:

<c:forEach items="${dynamicAttributesVar}" var="a"> 
${a.key}="${a.value}" 
</c:forEach> 

这将获得特定值:

<c:out value="${dynamicAttributesVar['someUnexpectedAttribute']}"/>

答案 1 :(得分:4)

“dynamicAttributesVar”是否是动态属性所在的页面上下文中键的名称?所以你可以做到

<c:out value="${dynamicAttributesVar.someUnexpectedAttributes}"/>

或者如果必须使用scriptlet:

Map dynamicAttributes = (Map) pageContext.getAttribute("dynamicAttributesVar")

(免责声明:我没有尝试过,我刚刚使用直接Java实现的标签中使用了动态属性......但这看起来很合理)