【问题标题】:Accessing HashMap<Long,String> in JSP with Integer key no longer works在 JSP 中使用整数键访问 HashMap<Long,String> 不再有效
【发布时间】:2014-02-27 21:33:22
【问题描述】:

这段代码过去可以正常工作,但我只是彻底检查了很多底层 Java 代码,现在它不再工作了。我有一个带有值的 bean:

<c:forEach items="${actionBean.appliedJobs}" var="aJob" varStatus="loop">
    ${aJob}
</c:forEach>

打印出来的是:14513=APPLIED 14535=APPLIED 14515=APPLIED 14514=APPLIED。 applyJobs 在 Java 中填充为 HashMap&lt;Long, String&gt;。我也有代码使用整数类型的变量jobId 访问这个数组。

${jobId} //This prints correctly as 14513
${actionBean.appliedJobs[jobId]} //Prints nothing, is likely null
${actionBean.appliedJobs[14513]} //This prints correctly as APPLIED

我认为,上面块中的第三行打印得很好,因为 14513 被解释为 Long。我知道 herehere 所描述的 Long/Integer jstl 问题,但是这段代码曾经可以工作的事实让我很失望。

编辑:目前,我为 jobId 创建了一个 getter(),它返回 Long jobId 而不是 Integer jobId,这已经绕过了这个问题,但我仍然想知道根本原因。

【问题讨论】:

  • 你找到它的根本原因了吗?
  • @iAmLearning 不,我想我从来没有这样做过,而且我再也无法访问此代码了。

标签: java jsp jstl el stripes


【解决方案1】:

您可以执行以下操作来遍历 Map 的所有元素:

 <c:forEach items="${actionBean.appliedJobs}" var="aJob" varStatus="loop">
            ${aJob.value}
            ${aJob.key}
 </c:forEach>

【讨论】:

  • javax.el.PropertyNotFoundException: Property 'value' not found on type javax.servlet.jsp.jstl.core.LoopTagSupport$1Status
  • 我的错误..我使用了 varStatus 变量而不是 var。尝试使用 aJob.value
  • 打印:APPLIED APPLIED APPLIED APPLIED
  • 期望的是应用的是值..如果要打印密钥,请使用 aJob.key
  • 我使用forEach作为调试工具,真正的问题出现在${actionBean.appliedJobs[jobId]}。阅读我的编辑以获取更多信息,我正在寻找根本原因。
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 2012-08-22
  • 2011-06-24
  • 2019-01-10
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 2014-10-09
相关资源
最近更新 更多