在 th select 的 SpringEL 表达式中将 String 转换为 Long
Cast String to Long in SpringEL expression for th select
我正在使用列表中的对象 ID 来决定是否应该选择它,如下所示:
<option th:each="tag : ${tagList}" th:value="${tag.id}" th:text="${tag.text}" th:selected="${idSet.contains(tag.id)}"></option>
但是,我必须专门创建 idSet (Set<Long>
),作为我最初的实现,使用现有的 Set<String>
:
<option th:each="tag : ${tagList}" th:value="${tag.id}" th:text="${tag.text}" th:selected="${searchSet.contains(Long.valueOf(tag.id))}"></option>
或
<option th:each="tag : ${tagList}" th:value="${tag.id}" th:text="${tag.text}" th:selected="${searchSet.contains(Long.parseLong(tag.id))}"></option>
产生了这个异常:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method valueOf(java.lang.Long) on null context object
如何在 SpringEL 表达式中使用我现有的一组带有 long 的字符串?
特殊的'T'运算符可用于指定java.lang.Class('type')的实例。 也使用此运算符调用静态方法
parseLong(String)
是Long
的静态方法
所以这应该有效
T(Long).parseLong(...)
向视图提供 Set
的 Long
值可能更简洁。您可以进行单元测试、缓存并使视图更简单。
Set<Long> longSet = setOfStrings.stream()
.map(s -> Long.parseLong(s))
.collect(Collectors.toSet());
model.addAttribute("searchSet", longSet);
否则,您可以使用 Spring 的 T
运算符静态解析字符串(或为 Java 创建一个 bean 实用程序,但这可能有点矫枉过正)。
我正在使用列表中的对象 ID 来决定是否应该选择它,如下所示:
<option th:each="tag : ${tagList}" th:value="${tag.id}" th:text="${tag.text}" th:selected="${idSet.contains(tag.id)}"></option>
但是,我必须专门创建 idSet (Set<Long>
),作为我最初的实现,使用现有的 Set<String>
:
<option th:each="tag : ${tagList}" th:value="${tag.id}" th:text="${tag.text}" th:selected="${searchSet.contains(Long.valueOf(tag.id))}"></option>
或
<option th:each="tag : ${tagList}" th:value="${tag.id}" th:text="${tag.text}" th:selected="${searchSet.contains(Long.parseLong(tag.id))}"></option>
产生了这个异常:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method valueOf(java.lang.Long) on null context object
如何在 SpringEL 表达式中使用我现有的一组带有 long 的字符串?
特殊的'T'运算符可用于指定java.lang.Class('type')的实例。 也使用此运算符调用静态方法
parseLong(String)
是Long
所以这应该有效
T(Long).parseLong(...)
向视图提供 Set
的 Long
值可能更简洁。您可以进行单元测试、缓存并使视图更简单。
Set<Long> longSet = setOfStrings.stream()
.map(s -> Long.parseLong(s))
.collect(Collectors.toSet());
model.addAttribute("searchSet", longSet);
否则,您可以使用 Spring 的 T
运算符静态解析字符串(或为 Java 创建一个 bean 实用程序,但这可能有点矫枉过正)。