Как сравнить две переменные объекта на языке выражения EL?

Я создаю выпадающий список всех языков. Выбор языка по умолчанию для списка будет определен информацией, добавленной пользователем:


.equals кажется, не существует в EL. Взглянув здесь предложено, чтобы я записал свою собственную функцию и затем импортировал и использовал это. Поскольку это - то от крошечной вещи только для этой страницы, я не хочу должным быть начинать создавать библиотеки и т.д. только для этого. И при этом я не хочу начинать создавать объекты специалиста для сервлета для возврата с этой дополнительной информацией в них.

Только вещь, которую я могу думать, чтобы сделать, состоит в том, чтобы возвратить фактический HTML для целой строки опции от сервлета, а не просто строки языка, но это кажется мне ужасный, таким образом, я надеюсь, что существует более изящное решение.

Каков лучший план относительно быстрого исправления к сравнению двух строк в EL?

Учебное руководство по J2EE 1.4

44
задан BalusC 15 June 2016 в 10:52
поделиться

2 ответа

В Expression Language вы можете просто использовать == или eq ] для сравнения значений объектов. За кулисами они фактически будут использовать Object # equals () . Это делается так, потому что до тех пор, пока в текущей версии EL 2.1 вы не сможете вызывать методы с другими сигнатурами, кроме стандартных методов получения (и установки) (в предстоящей версии EL 2.2 это будет возможно).

Таким образом, конкретная строка

<c:when test="${lang}.equals(${pageLang})">

должна быть записана как (обратите внимание, что все выражение находится внутри { и } )

<c:when test="${lang == pageLang}">

или, что эквивалентно

<c:when test="${lang eq pageLang}">

Оба являются "за кулисами" примерно интерпретируется как

jspContext.findAttribute("lang").equals(jspContext.findAttribute("pageLang"))

. Если вы хотите сравнить значения констант String , вам нужно указать его

<c:when test="${lang == 'en'}">

или, что эквивалентно

<c:when test="${lang eq 'en'}">

, которое за кадром примерно интерпретируется как

jspContext.findAttribute("lang").equals("en")
103
ответ дан 26 November 2019 в 21:52
поделиться

Не уверен, правильно ли я вас понял, но самый простой способ был бы примерно таким:

<c:if test="${languageBean.locale == 'en'">
  <f:selectItems value="#{customerBean.selectableCommands_limited_en}" />
</c:if>

Просто скопируйте и вставьте из моего приложения ...

HTH

3
ответ дан 26 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

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