Использование JSTL «динамического» имени параметра - PullRequest
1 голос
/ 02 октября 2011

JSTL код:

<c:forEach var = "currentUser" items = "${users}">
    <c:out value = "${currentUser.userName}" /></p>
    <c:if test = "${!empty param.${currentUser.id}}">
        <p>Details</p>
    </c:if>
</c:forEach>

У меня есть список пользовательских объектов, и я отображаю все их имена. Если кто-то хочет увидеть детали любого пользователя, сервлету отправляется запрос, который возвращает атрибут с именем id и объектом DetailUser

Servlet:

req.setAttribute(currentUSer.getId, userDetails);

Проблема заключается в том, что теперь, если нужно использовать значение «id» в тесте if не как параметр, а вместо имени параметра. Я пробовал этот EL в выражении EL, но я действительно уверен, что это не разрешено. Любые другие предложения?

1 Ответ

0 голосов
/ 02 октября 2011

Мне кажется, что вы делаете это более сложным, чем могло бы быть. Я просто сделал бы

req.setAttribute("userDetails", userDetails);

и в JSP проверил, совпадает ли текущий идентификатор пользователя сподробное описание:

<c:if test="${userDetails.id == currentUser.id}">
    <p>Details</p>
</c:if>

Кстати, param.foo возвращает значение параметра запроса, а не значение атрибута запроса.Вы можете сделать то, что вы хотели, используя

<c:if test = "${!empty requestScope[currentUser.id]}">

Запись [] вместо оператора . - это способ передачи динамического имени, а не статического.

...