gpt4 book ai didi

java - JSTL 访问 HashMap 中的整数/长键

转载 作者:行者123 更新时间:2023-11-30 07:26:18 25 4
gpt4 key购买 nike

我在 JSTL 中使用 EL 时遇到了一些问题,无法按我的意愿访问 Java Hash Map。我知道在 EL 中,如果 Integer 被访问为 Long,则 key 。我有以下试图在 JSTL 中访问的 HashMap 定义 -

Map<Long, Object> testMap = new HashMap<Long, Object>();

在 JSP 页面中,我需要检查映射是否包含特定键。我尝试通过检查是否为空来做到这一点,如下所示 -

<c:if test='${ ! empty testMap[currObj.currVal]}'>

我还在代码中的某处访问 map 的键值,如下所示 -

<c:if test='${ testMapMap[5].data == 'something'}'>

现在的问题-

如果我将上面的 map 定义为 <Integer, Object>然后第一个 c:if 工作但第二个失败(因为第二个尝试以 Long 访问它)。但是,如果我将上面的 map 定义为 <Long, Object>第一个 if 检查总是失败,因为它总是将其识别为空,但第二个 if 语句在我检查值的地方有效。

有什么好的方法可以确保我正确访问两个 if 语句的 HashMap 吗?我将不胜感激。

最佳答案

什么是currObj?您能否将其 currVal 成员重新定义为 Long(或 long)?


数字文字(匹配 EL 语法中的 IntegerLiteral 产生式)将表示为 Long。表达式 currObj.currVal 的计算结果为 IntegerLong 永远不会 equals() Integer,因此一个表达式必须产生不同的类型。

本质上,您需要的是显式类型转换。 EL 中没有内置此类内容,但您可以创建自定义 EL 函数来为您完成。这是您在 Java 中实现的静态函数,然后在 TLD 中进行描述。我的另一个答案gives an example的包装。以下是您的情况下的函数及其用法。

package com.y.taglib.core;

public final class CoercionUtil {

public static Long toLong(Long n) {
return n;
}

}

TLD 看起来像这样:

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>x-c</short-name>
<uri>http://dev.y.com/taglib/core/1.0</uri>
<function>
<description>Coerce to a java.lang.Long.</description>
<display-name>long</display-name>
<name>long</name>
<function-class>com.y.taglib.core.CoercionUtil</function-class>
<function-signature>java.lang.Long toLong(java.lang.Long)</function-signature>
</function>
</taglib>

在你的 JSP 中:

<%@taglib uri="http://dev.y.com/taglib/core/1.0" prefix="my" %>
...
<c:if test='${ ! empty testMap[my:long(currObj.currVal)]}'>

JSP 引擎负责必要的类型转换(从 currValInteger 结果到 所需的 Long toLong() 方法。你的方法只是用来指示所需的类型;没有它,JSP 引擎会看到 testMap.get(Object) 的参数的(已删除的)类型,并且不认为需要执行任何强制转换,因为 Integer 是一个 Object

关于java - JSTL 访问 HashMap 中的整数/长键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com