3

因此,根据我的 JSP 参考书,以及我在网上可以找到的所有其他参考资料,我应该能够执行以下操作:

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

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

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

但是,这根本行不通。当我尝试时,我只是得到一个“dynamicAttributesVar 无法解析”的错误。

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

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>

现在,除非我还在我的 tag 指令上使用了 dynamic-attributes 参数,否则该 hack 不起作用,所以似乎该参数正在做某事

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

4

2 回答 2

5

只是想获得一个徽章来回答一个四年前的问题。

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

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

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

这将得到一个特定的值:

<c:out value="${dynamicAttributesVar['someUnexpectedAttribute']}"/>
于 2013-09-23T10:05:44.383 回答
4

“dynamicAttributesVar”不是动态属性放入的页面上下文中的键名吗?所以你可以做

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

或者如果您必须使用 scriptlet:

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

(免责声明:我没有尝试过,我只是在带有直接 Java 实现的标签中使用了动态属性......但这似乎是合理的)

于 2009-04-18T00:03:52.767 回答