因此,根据我的JSP参考书,以及我可以在网上找到的所有其他参考资料,我应该可以做类似的事情:
<%@ tag dynamic-attributes="dynamicAttributesVar" %>
然后当有人使用我未在属性指令中定义的属性时,我应该能够从“dynamicAttributesVar”地图访问该属性:
<%= dynamicAttributesVar.get("someUnexpectedAttribute") %>
但是,这根本不起作用;我尝试时只得到“dynamicAttributesVar无法解析”的错误。
现在,我确实发现(通过查看生成的标记Java类),我可以通过执行以下操作来“破解”正在运行的动态属性变量:
<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>
现在,除非我在tag指令上使用dynamic-attributes参数,否则该hack不起作用,所以看起来该参数正在执行某事。
但我想知道的是,我怎样才能让它为其他每个JSP用户做它做的事情?
答案 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实现的标签中使用了动态属性......但这看起来很合理)