Spring MVC:如何在没有值时测试param是否存在?

时间:2015-10-30 20:49:52

标签: spring security login

我想用自定义login.jsp表单显示错误消息。当出现错误时,url为../loginForm?error,没有任何值分配给错误。 (这似乎是Spring Security的行为。)如果没有错误,则url只是../loginForm(没有参数)。在控制器中我可以用@RequestParam捕获参数,但是如何检查错误是否通过?换句话说,如何在没有值的情况下单独测试参数?

这是我现在拥有的控制器代码:

@RequestMapping("/loginForm")
public String showLoginForm(@RequestParam(value="error", defaultValue="false") 
                                    boolean error,
                                Model model)
{
    if (error == true) 
    {
        model.addAttribute("loginError", "Invalid username and password.");
    }

    return "/user/loginForm";
}

...这里是JSP片段:

 <c:if test="${not empty loginError}">
  <tr>
   <td><c:out value="${loginError}" /></td>
  </tr>
 </c:if>

此时我还没有包含我设置的安全配置,因为其他一切似乎都在运行,我希望专注于手头的问题。

提前感谢任何建议!

2 个答案:

答案 0 :(得分:4)

Ok, I figured it out (while taking a break). The @RequestParam only works when there's actually a parameter available for mapping. If no such parameter is passed in, it's useless. So instead, I checked the Map provided by ServletRequest:

@RequestMapping("/loginForm")
public String showLoginForm(ServletRequest request, Model model)
{
    Map<String, String[]> paramMap = request.getParameterMap();

    if (paramMap.containsKey("error")) 
    { 
        model.addAttribute("loginError", "Invalid username and password.");
    }

    return "/user/loginForm";
}

It works fine now.

答案 1 :(得分:0)

还有另一种方法。只需创建另一种方法,其中@RequestMapping将检查“错误”参数的存在,添加必需的属性并返回视图。两种方法可以同时存在。

.ps1