Там какой-либо путь состоит в том, чтобы назвать toString () на объекте с EL и JSTL? (Мне нужно Строковое представление перечисления как индекс в карте в выражении JSP EL.) Я надеялся что-то как ${''+object}
работал бы как в Java, но EL не настолько хорош, и там, кажется, не функция, которая делает это.
Разъяснение: у Меня есть переменная somemap
это отображает Строки на Строки, и у меня есть переменная someenum
это - перечисление. Я хотел бы сделать что-то как ${somemap[someenum.toString()]}
. (Конечно, .toString () не работает, но что делает?)
Вы просто сделайте это так:
${object}
И он toString
сделает это за вас.
edit : Ваше вложенное выражение может быть разрешено следующим образом:
<c:set var="myValue">${someenum}</c:set>
${somemap[myValue]}
Первая строка преобразует (используя toString ()
) выражение $ {someenum}
и сохраняет это в переменной myValue
. Вторая строка использует myValue
для индексации карты.
Пара вещей, которые вы можете сделать.
Во-первых, вы можете использовать c: set -
<c:set var="nowAString">${yourVar}</c:set>
Еще вы можете создать свою собственную функцию EL, вызвать ее toString, а затем вызвать ее в JSTL. Функции EL - это в основном статические методы, связанные с файлом taglib. Несложно сделать.
Редактировать:
Правда? Вы действительно, знаете, пробовали это?
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<%
pageContext.setAttribute("testDate", new java.util.Date());
%>
<c:set var="myVar">${testDate}</c:set>
testDate = ${testDate}<br/>
myVar = ${myVar}<br/>
testDate Class = ${testDate.class}<br/>
myVar Class = ${myVar.class}<br/>
</body>
</html>
А файл тегов JSP 2.0 и функции JSTL тривиальны.
Ответ Уилла Хартунга должен сработать. Вот копия, вставляемая и выполняемая SSCCE :
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!doctype html>
<%!
enum MyEnum {
FOO, BAR
}
%>
<%
request.setAttribute("myEnum", MyEnum.FOO);
java.util.Map<String, String> map = new java.util.HashMap<String, String>();
map.put("FOO", "value of key FOO");
map.put("BAR", "value of key BAR");
request.setAttribute("map", map);
%>
<html lang="en">
<head>
<title>Test</title>
</head>
<body>
<p>Map: ${map}
<p>Enum: ${myEnum}
<c:set var="myEnumAsString">${myEnum}</c:set>
<p>Map value: ${map[myEnumAsString]}
</body>
</html>
Это дает:
Карта: {BAR = значение ключа BAR, FOO = значение ключа FOO}
Enum: FOO
Значение карты: значение ключа FOO
(скриптлеты предназначены только для быстрого прототипирования, не используйте их в реальности!)