如何使用EL + JSTL将任意对象转换为String? (调用toString())
有没有办法用EL和JSTL调用对象上的toString()? (我需要枚举的String表示作为JSP EL表达式中映射的索引。)我希望像${''+object}
这样的东西在java中工作,但是EL不是很好,而且没有似乎是任何能够做到这一点的function。
澄清:我有一个变量somemap
将字符串映射到字符串,我有一个变量someenum
,它是一个枚举。 我想做一些像${somemap[someenum.toString()]}
这样的事情。 (当然.toString()不起作用,但是什么呢?)
你这样做是这样的:
${object}
而且它会为你toString
起来。
编辑 :您的嵌套表达式可以像这样解决:
${someenum} ${somemap[myValue]}
第一行将${someenum}
表达式字符串化(使用toString()
)并将其存储在myValue
变量中。 第二行使用myValue
索引地图。
你可以做几件事情。
一,你可以使用c:set –
${yourVar}
你可以做的另一件事是创建自己的EL函数,将其命名为toString,然后在JSTL中调用它。 EL函数基本上是与taglib文件连接的静态方法。 直截了当做。
编辑:
真? 你知道吗,你真的尝试过吗?
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %> JSP Page Hello World!
<% pageContext.setAttribute("testDate", new java.util.Date()); %> ${testDate} testDate = ${testDate}
myVar = ${myVar}
testDate Class = ${testDate.class}
myVar Class = ${myVar.class}
JSP 2.0标记文件和JSTL函数都是微不足道的。
我认为在新版本的JSP api中你可以调用方法,即使是参数!
我刚试过${statusColorMap[jobExecution.exitStatus.toString()]}
,它运行正常!
Will Hartung的答案应该有效。 这是一个复制’ n’paste’n’runnable SSCCE :
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%! enum MyEnum { FOO, BAR } %> <% request.setAttribute("myEnum", MyEnum.FOO); java.util.Map map = new java.util.HashMap(); map.put("FOO", "value of key FOO"); map.put("BAR", "value of key BAR"); request.setAttribute("map", map); %> Test Map: ${map}
Enum: ${myEnum} ${myEnum}
Map value: ${map[myEnumAsString]}
这会产生:
地图:{BAR =关键BAR的值,FOO =关键FOO的值}
Enum:FOO
地图值:关键FOO的值
(scriptlet只是用于快速原型设计,不要在实际中使用它们!)
//In java public class Foo { // Define properties and get/set methods private int prop1; private String prop2; public String toString() { String jsonString = ...; /// Convert this object to JSON string return jsonString; } }
正如skaffman所说 ,EL语法${obj}
将调用toString()
。
因此,如果JSTL
的对象foo
是Foo
的实例。 然后,
// test.jsp
例
如果toString()
将输出JSON
格式字符串,例如, Foo
的toString()
输出JSON
格式字符串。 然后:
// .java codes Foo a = ...// a Foo object. => { 'prop1': ooo } List b = ... //< Array. => [ {'prop1': ooo}, {prop1: xxx} ] // Pass object to JSTL by HttpServletRequest or .. request.setAttribute('a', a); request.setAttribute('b', b); // .jsp codes ${a.prop1}