Thymeleaf - 如何在Thymeleaf标签"th:if"中将字符串与html中的请求参数进行比较?

use*_*080 11 html spring-mvc thymeleaf

如何在Thymeleaf标签"th:if"中将字符串与html中的请求参数进行比较?现在我正在使用这个

<div class="error" th:if="${param.error == 'badCredentialsException'}" th:with="errorMsg=#{login.badCredentials}">                      
     <p class="errorMsg"><span th:text="${errorMsg}"></span></p>
</div>
Run Code Online (Sandbox Code Playgroud)

但没有运气,它不起作用.

mic*_*man 26

它不起作用,因为param.error是字符串数组.您必须检索array(param.error[0])的第一个元素以获取参数的第一个值(请参阅文档).除此之外,您还可以通过Web上下文对象方法访问请求参数#httpServletRequest.getParameter,该方法在参数为多值时返回第一个值(请参阅文档).

  1. Web上下文命名空间用于请求属性

    <div class="error" th:if="${param.error[0] == 'badCredentialsException'}" th:with="errorMsg=#{login.badCredentials}">                      
        <p class="errorMsg"><span th:text="${errorMsg}"></span></p>
    </div>
    
    Run Code Online (Sandbox Code Playgroud)
  2. Web上下文对象的用法

    <div class="error" th:if="${#httpServletRequest.getParameter('error') == 'badCredentialsException'}" th:with="errorMsg=#{login.badCredentials}">                      
        <p class="errorMsg"><span th:text="${errorMsg}"></span></p>
    </div>
    
    Run Code Online (Sandbox Code Playgroud)

  • 关于此的重要说明:$ {param.error [0]}将导致SpelEvaluationException如果没有此类请求参数,则无法索引为空值.这取决于您的上下文,但您可能需要先检查$ {param.containsKey('error')}. (3认同)

RiZ*_*KiT 5

对于 Thymeleaf 3,我通常使用#request(的缩写形式#httpservletrequest),#strings.equals()为此,它看起来像这样:

<div th:if="${#strings.equals(#request.getParameter('error'), 'badCredentialsException')}"></div>
Run Code Online (Sandbox Code Playgroud)