【问题标题】:How to access HashMap in JSP by Object key (rather than String)如何通过对象键(而不是字符串)访问 JSP 中的 HashMap
【发布时间】:2012-01-11 20:04:03
【问题描述】:

我可以在 JSTL 中轻松访问 HashMap<String, Object>,但是否可以访问 HashMap<Object, Object>

我之所以问,是因为我在尝试以下操作时没有收到任何错误(或输出):

${myHashMap[anObject]}

这让我相信 myHashMap 正在尝试找到我的价值,但它以某种方式没有将 anObject 评估为正确的键。我可以验证 myHashMap 是否将 anObject 作为键,并带有应显示的(非空白/非空)值。

【问题讨论】:

  • 查看javadoc中HashMap的签名。 get 方法采用 Object,而不是 K。无论如何,不​​清楚你到底在问什么。
  • 我开始认为有阴谋,但我会温和地问 - @skaffman 我的问题有什么不清楚的地方?
  • 您没有很清楚地说明具体问题。例如,短语“但是密钥不正确” 是模棱两可的。
  • 已编辑 - 我会在这方面做得更好。

标签: java jsp el


【解决方案1】:

这种语法确实应该有效。我知道您没有通过给定对象作为键获得任何价值,尽管您确信所需的对象在那里?在这种情况下,代码中${anObject} 后面表示的类必须正确实现equals()(和hashCode())方法。 Map#get() 即通过equals() 方法测试密钥。另请参阅 javadoc:

返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null

更正式地说,如果此映射包含从键 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),则此方法返回 v;否则返回null。 (最多可以有一个这样的映射。)

换句话说,如果您的${anObject}equals() 为映射键返回true,则将返回关联的映射值,否则将返回null,EL 将不打印任何内容。

它适用于String 仅仅是因为该类正确实现了equals() already

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 2020-02-02
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多