【问题标题】:How Do I make dynamic-attributes Work in JSP Tag Files?如何使动态属性在 JSP 标记文件中起作用?
【发布时间】:2010-10-20 05:46:47
【问题描述】:

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

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

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

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

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

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

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>

现在,除非我还在我的标签指令上使用动态属性参数,否则该 hack 不起作用,因此该参数似乎在做 某事

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

【问题讨论】:

    标签: java jsp tags dynamic-attributes


    【解决方案1】:

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

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

    原始发帖人本可以使用此代码获取所有键/值:

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

    这会得到一个特定的值:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 啊,这更有意义!您的建议有效,稍作修改(我不得不使用 jspContext.getAttribute 而不是 pageContext.get)。非常感谢!
      • 啊,我会更新答案。好久没写了。
      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2010-11-13
      • 2023-04-07
      • 2014-07-30
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      相关资源
      最近更新 更多