2017-02-10 8 views
2

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

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

org.springframework.expression.spel.SpelEvaluationException: EL1011E: Метод вызова: Пытались вызвать метод метод (java.lang.String) на несуществующий объект контекста

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

@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> 

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

ответ

3

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

+1

Правильно, но почему? В документации делается ссылка на #request, а не на #httpServletRequest. –

+0

Это зависит от версии тимелеафа. В версии 2 это выглядит как #httpServletRequest: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#expression-basic-objects и на версии 3 #request: http: //www.thymeleaf. org/doc/tutorials/3.0/usingthymeleaf.html # expression-basic-objects - однако вы утверждаете, что уже используете thymeleaf 3, поэтому я не уверен в этой проблеме. Может быть, вы используете более старую версию, чем вы думаете? – eis

0

Я думаю, проблема в том, что вы должны использовать #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')}" /> 
+0

Спасибо за этот совет. К сожалению, я все еще получаю ту же ошибку, и я уверен, что это связано с некоторой проблемой с #request и другими объектами веб-контекста. Это происходит для любого шаблона, в котором я использую объекты веб-контекста, даже те, где я не использую #strings. –

+0

Хм ... ну, я не знаю, куда идти отсюда. Я воссоздал тот же самый код, который у вас есть, и у вас нет проблем с использованием #strings или #request/#response. (Тимелеар 3, весенний ботинок 1.4.2) – Metroids

0

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

@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"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^