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

Posted

技术标签:

【中文标题】Thymeleaf - 如何在 Thymeleaf 标签“th:if”中将字符串与 html 中的请求参数进行比较?【英文标题】:Thymeleaf - How to compare string with request parameter in html in Thymeleaf tag "th:if"? 【发布时间】:2014-06-08 05:25:21 【问题描述】:

如何在 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>

但运气不好,它不起作用。

【问题讨论】:

您确定 $param.error 的值正确吗? 【参考方案1】:

这对我很有效

#strings.equals(string1, string2)

【讨论】:

这与this other answer中的解决方案相同。【参考方案2】:

在 Thymeleaf 3 中,我通常使用 #request#httpservletrequest 的缩写形式)和 #strings.equals(),如下所示:

<div th:if="$#strings.equals(#request.getParameter('error'), 'badCredentialsException')"></div>

【讨论】:

【参考方案3】:

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

    对请求属性使用 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>
    

    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>
    

【讨论】:

关于此的重要说明:如果没有这样的请求参数,$param.error[0] 将导致 SpelEvaluationException 无法索引到空值。这取决于您的上下文,但您可能需要检查 $param.containsKey('error') 之前。

以上是关于Thymeleaf - 如何在 Thymeleaf 标签“th:if”中将字符串与 html 中的请求参数进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Thymeleaf 写入响应标头

如何在 Thymeleaf 中循环遍历 Map

Thymeleaf:如何获取 URL 属性值

如何在 Thymeleaf 中创建动态表..?

如何在 Thymeleaf 中执行 if-else?

Thymeleaf - 如何交互和重新加载 Javascript?