Thymeleaf: th:текст, только если не нуль?

У меня есть что-то вроде ниже, что, конечно, работает, если пользователь ранее ввел свои неправильные учетные данные.

Однако, если я напрямую перейду к моему неудачному URL-адресу входа /login?error, например, без каких-либо предыдущих неверных входов в систему, session[SPRING_SECURITY_LAST_EXCEPTION], конечно, null, и я получу неприятную 404.

<span th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>

Вопрос:

Есть ли процессор для чего-то вроде приведенного ниже (что слишком долго для записи и чтения в большинстве случаев), или я должен просто накатить свой собственный?

<span th:text="${session[SPRING_SECURITY_LAST_EXCEPTION] != null ? session[SPRING_SECURITY_LAST_EXCEPTION].message : #messages.msg('AbstractUserDetailsAuthenticationProvider.badCredentials')}">
    Invalid credentials
</span>

person Rey Libutan    schedule 20.07.2015    source источник


Ответы (4)


Вы можете использовать оператор th:if:

<span th:if="${session[SPRING_SECURITY_LAST_EXCEPTION].message}" th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>

Эта строка будет отображаться только в том случае, если присутствует значение.

РЕДАКТИРОВАТЬ 1:

Дополнительная проверка:

<span th:if="${session[SPRING_SECURITY_LAST_EXCEPTION] != null and session[SPRING_SECURITY_LAST_EXCEPTION].message != null}" th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>
person Aeseir    schedule 21.07.2015
comment
если session[SPRING_SECURITY_LAST_EXCEPTION] равно нулю, он выдаст NPE на .message - person Rey Libutan; 21.07.2015
comment
Не тот случай, если он равен нулю, тогда если оператор имеет значение FALSE, поэтому th:text не отображается. - person Aeseir; 21.07.2015
comment
Это то, что вы написали th:if="${session[SPRING_SECURITY_LAST_EXCEPTION].message}" - person Rey Libutan; 21.07.2015
comment
Я отредактировал ответ, чтобы добавить еще один уровень тестов на тот случай, если он не сработает для вас (что он сделал для меня для аналогичной вещи). - person Aeseir; 22.07.2015

Попробуйте этот код, он более оптимален:

${session['SPRING_SECURITY_LAST_EXCEPTION']?.message}

? - проверяет, не является ли ресурс нулевым

person Sarvar Nishonboyev    schedule 29.01.2018

Попробуй это:

<span th:if="${session[SPRING_SECURITY_LAST_EXCEPTION].message != null}">
    <span th:text="${session[SPRING_SECURITY_LAST_EXCEPTION].message}">Invalid credentials</span>
</span>
person anishroniyar    schedule 21.07.2015

В вашем контроллере установите нулевую строковую переменную как

String nullvalue="";
model.addAttribute("nullvalue",nullvalue);
model.addAttribute("entity",entity);

затем в вашем классе просмотра, как в тимелеафе

<td data-th-if="${entity.field != nullvalue}">ok</td>
person Devraj Giri    schedule 16.10.2018