2017-02-10 5 views
2

Ich versuche, Methoden auf Webkontextobjekte wie #request und #response in meinen Vorlagen in thymeleaf 3.0.3 und Spring Boot 1.5.1 aufzurufen.Probleme beim Aufrufen von Methoden für Webkontextobjekte in thymeleaf-Vorlage

ich immer Fehler wie diese:

org.springframework.expression.spel.SpelEvaluationException: EL1011E: Aufruf Methode: Versuchte Methode Methode (java.lang.String) auf null Kontextobjekt zu nennen

hier ist ein Controller:

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

und eine Vorlage:

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

Dies ist ein Beispiel, aber wo immer ich das versuche, bekomme ich diese Fehler. Gibt es ein Stück, das ich vermisse?

Antwort

3

Es stellte sich heraus #request erforderlich sein, um sein #httpServletRequest

+1

Das stimmt, aber warum? Die Dokumentation verweist auf #request not #httpServletRequest. –

+0

Es kommt auf die Thymelaft-Version an. In Version 2 scheint es #httpServletRequest zu sein: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#expression-basic-objects und auf Version 3 #request: http: //www.thymeleaf. org/doc/tutorials/3.0/usethymeleaf.html # expression-basic-objects - allerdings behaupten Sie, Sie benutzen thymeleaf 3 bereits, ich bin mir also nicht sicher, was das Problem ist. Vielleicht verwenden Sie eine ältere Version als Sie denken? – eis

0

Ich denke, das Problem hier ist, dass Sie #strings und nicht #string verwenden sollten. Der #request Teil sieht gut aus.

Auch nur einige Kommentare zu Ihrem Programmierstil, können Sie formatieren:

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

einfach

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

Danke für diesen Stil Tipp. Leider bekomme ich immer noch den gleichen Fehler und bin mir ziemlich sicher, dass dies auf ein Problem mit #request und anderen Webkontextobjekten zurückzuführen ist. Dies geschieht für jede Vorlage, die ich die Webkontextobjekte verwende, selbst wenn ich # strings nicht verwende. –

+0

Hmm ... nun, ich weiß nicht wohin von hier aus. Ich habe den gleichen Code wie oben erstellt und habe keine Probleme mit #strings oder #request/#response. (Thymeleaf 3, Springboot 1.4.2) – Metroids

0

Ich denke, Das Modell funktioniert gut, wenn es alleine verwendet wird. So könnte Ihre Methode in etwa so aussehen:

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