Как я могу правильно проверить, содержит ли URL-адрес параметры запроса в thymeleaf?

#thymeleaf

#thymeleaf

Вопрос:

Это URL-адрес, который я использую для входа на страницу без каких-либо параметров запроса.

 http://localhost:8080/signin
  

Это URL-адрес страницы входа с ошибкой неверных учетных данных,

 http://localhost:8080/signin?param.error=bad_credentials
  

Теперь я проверяю param.error , как показано ниже,

 <div class="error" th:if="${(param.error != null) and (param.error[0] == 'bad_credentials')}">
  

Когда я загружаю страницу входа, я получаю исключение SpringEL,

 Exception evaluating SpringEL expression: "(param.error != null) and (param.error[0] == 'bad_credentials')"
  

Я думаю, поскольку при загрузке страницы входа в систему параметров запроса нет, он не может их найти param.error .

Как я могу правильно проверить, содержит ли URL параметры запроса?

Комментарии:

1. попробуйте th: if=»${param.error} и ${param.error[0] == ‘bad_credentials’}»

2. Я не заметил, что вы на самом деле назвали свой параметр ‘param.error’. Попробуйте отправить запрос на localhost:8080/signin?ошибка =bad_credentials .

Ответ №1:

Это сложно. В документации, которую вам рекомендуется использовать:

 ${param.containsKey('foo')}
  

Но это не работает, и когда вы смотрите на исходный код этого класса, внезапно становится ясно:

 @Override
public boolean containsKey(final Object key) {
    return true;
}
  

В итоге я получаю:

 ${param.keySet().contains('foo')}
  

Ответ №2:

Мне удалось это сделать 🙂 Возможно, это немного уродливый способ получить param, но он работает.

 <div th:with="myMap=${#ctx.requestParameters}">
      <span th:if="${#maps.containsKey(myMap, 'param')}" th:text="${'requestParam: '   #ctx.requestParameters.get('param')[0]}"></span>
</div>
  

Мой адрес: http://localhost:8080/thvsjsp/subscribeth?param=something

Вывод: requestParam: something

Полезная глава в руководстве

HTH

Редактировать:

Вот гораздо лучший способ:

 <span th:if="${param.abc != null}" th:text="${'requestParam: '   param.abc[0]}"></span>
  

Параметр запроса является String[] , и именно поэтому нам нужно использовать [0]

Здесь подробнее об этом

Комментарии:

1. «если» можно упростить еще больше: th:if="${param.abc}"