如何使用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的对象fooFoo的实例。 然后,

 // test.jsp  

如果toString()将输出JSON格式字符串,例如, FootoString()输出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}