如何正确检查URL是否包含百里香的请求参数?

时间:2014-07-03 09:31:18

标签: thymeleaf

这是我用于登录页面的网址,没有任何请求参数。

http://localhost:8080/signin

这是登录页面的网址,包含错误凭据错误

http://localhost:8080/signin?param.error=bad_credentials

现在我检查下面的param.error

<div class="error" th:if="${(param.error != null) and (param.error[0] == 'bad_credentials')}">

当我加载登录页面时,我得到一个SpringEL异常,

Exception evaluating SpringEL expression: "(param.error != null) and (param.error[0] == 'bad_credentials')"

我认为因为加载登录页面时没有请求参数,所以无法找到param.error

如何正确检查网址是否包含请求参数?

2 个答案:

答案 0 :(得分:1)

我设法做到这一点:)也许这是一个有点丑陋的方式来获得param,但它确实有效。

<div th:with="myMap=${#ctx.requestParameters}">
      <span th:if="${#maps.containsKey(myMap, 'param')}" th:text="${'requestParam: ' + #ctx.requestParameters.get('param')[0]}"></span>
</div>

我的地址:http://localhost:8080/thvsjsp/subscribeth?param=something

输出:requestParam: something

Useful chapter in manual

HTH

修改

这是更好的方法:

<span th:if="${param.abc != null}" th:text="${'requestParam: ' + param.abc[0]}"></span>

请求参数为String[],这就是我们需要使用[0]

的原因

Here more about it

答案 1 :(得分:1)

这很棘手。在文档中,建议您使用:

${param.containsKey('foo')}

但是它不起作用,当您查看此类的源代码时,它突然变得很清楚:

@Override
public boolean containsKey(final Object key) {
    return true;
}

我最终得到:

${param.keySet().contains('foo')}