Как преобразовать произвольный объект для Строкового представления с EL + JSTL? (звонящий toString ())

Там какой-либо путь состоит в том, чтобы назвать toString () на объекте с EL и JSTL? (Мне нужно Строковое представление перечисления как индекс в карте в выражении JSP EL.) Я надеялся что-то как ${''+object} работал бы как в Java, но EL не настолько хорош, и там, кажется, не функция, которая делает это.

Разъяснение: у Меня есть переменная somemap это отображает Строки на Строки, и у меня есть переменная someenum это - перечисление. Я хотел бы сделать что-то как ${somemap[someenum.toString()]}. (Конечно, .toString () не работает, но что делает?)

11
задан Hans-Peter Störr 25 May 2010 в 12:19
поделиться

3 ответа

Вы просто сделайте это так:

${object}

И он toString сделает это за вас.


edit : Ваше вложенное выражение может быть разрешено следующим образом:

<c:set var="myValue">${someenum}</c:set>
${somemap[myValue]}

Первая строка преобразует (используя toString () ) выражение $ {someenum} и сохраняет это в переменной myValue . Вторая строка использует myValue для индексации карты.

23
ответ дан 3 December 2019 в 02:40
поделиться

Пара вещей, которые вы можете сделать.

Во-первых, вы можете использовать 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 тривиальны.

5
ответ дан 3 December 2019 в 02:40
поделиться

Ответ Уилла Хартунга должен сработать. Вот копия, вставляемая и выполняемая 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

(скриптлеты предназначены только для быстрого прототипирования, не используйте их в реальности!)

1
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: