Проблемы с вызовом методов для объектов веб-контекста в шаблоне thymeleaf



Я пытаюсь вызвать методы для объектов веб-контекста, таких как #request и #response в моих шаблонах в thymeleaf 3.0.3 и Spring Boot 1.5.1.



Я постоянно получаю такие ошибки:



Орг.весенняя рамка.выражение.спел.SpelEvaluationException: EL1011E: вызов метода: попытка вызвать метод method (java.яз..String) on null context object



Вот контроллер:



@Controller
public class Controller {

@RequestMapping(method = RequestMethod.GET, value = "/endpoint", produces = "text/html")
public String customerServiceSignin(Model uiModel, HttpServletRequest request) {
uiModel.addAttribute("attr1", true); // show proper header
uiModel.addAttribute("attr2", false);
return "template";
}


И шаблон:



<html xmlns:th="http://www.thymeleaf.org">
<div>
<div style="...">

<div class="errorblock" th:unless="${#strings.isEmpty(#request.getAttribute('some_attr'))}" th:utext="${#request.getAttribute('some_other_attr')}"></div>

<form name='f' action="action" method='POST'>
<table>
<tr>
<td>User:</td>
<td><input type='text' name='username' value="" />
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password' />
</td>
</tr>
<tr>
<td><input name="submit" type="submit" value="submit" />
</td>
<td><input name="reset" type="reset" />
</td>
</tr>
</table>
</form>
</div>
</div>
</html>


Это один из примеров, но везде, где я пытаюсь это сделать это я получаю такие ошибки. Есть ли что-то, чего мне не хватает?

671   3  

3 ответов:

Оказывается, #request должен быть #httpServletRequest

Я думаю, что проблема здесь заключается в том, что вы должны использовать #strings и не #string. Часть #request выглядит нормально.

Кроме того, просто некоторые комментарии к вашему стилю кодирования, вы можете отформатировать:

<th:block th:if="${not #string.isEmpty(#request.getAttribute('some_attr'))}">
    <div class="errorblock" th:utext="${#request.getAttribute('some_other_attr')}"></div>
</th:block>

Просто быть

<div th:unless="${#strings.isEmpty(#request.getAttribute('some_attr'))}" class="errorblock" th:utext="${#request.getAttribute('some_other_attr')}" />

Я думаю, что модель работает просто отлично, если используется в одиночку. Поэтому ваш метод может выглядеть примерно так:

@Controller
public class Controller {

@RequestMapping(method = RequestMethod.GET, value = "/endpoint", produces = "text/html")
public String customerServiceSignin(Model uiModel) {
    uiModel.addAttribute("attr1", true); // show proper header
    uiModel.addAttribute("attr2", false);
    return "template";
}

Comments

    Ничего не найдено.