2009-04-17 72 views
3

所以根据我的JSP参考书,以及所有其他的参考,我可以在网上找到,我应该能够做到像:如何使动态属性在JSP标记文件中工作?

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

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

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

然而,这是不行的,在所有;当我尝试时,我收到“dynamicAttributesVar无法解析”错误。现在

,我没有发现(通过查看标签生成的Java类),我可以“砍”的工作动态做属性变量:

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %> 

现在,黑客无法正常工作除非我也在我的标记指令中使用动态属性参数,所以看起来该参数正在做

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

回答

4

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

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

,或者如果你必须使用小脚本:

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

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

+0

啊,才使得这么多的意义!你的建议工作,稍作修改(我不得不使用jspContext.getAttribute而不是pageContext.get)。感谢一堆! – machineghost 2009-04-18 00:08:02

5

只是试图获得一个回答四年的问题的徽章。

我也遇到过这个问题,并且在O'Reilly处遇到一些帮助,使用JSTL代替scriptlet。

楼主也可以使用此代码来获取所有的键/值:

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

这会得到一个特定的值:

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