2015-10-30 2 views
3

Я хочу показать сообщение об ошибке с моей пользовательской формой login.jsp. При возникновении ошибки URL-адрес: ../loginForm?error без значения, присвоенного ошибке. (Похоже, это поведение Spring Security.) Если нет ошибки, url просто ../loginForm (без параметра). В контроллере я могу захватить параметр с помощью @RequestParam, но как проверить, передана ли ошибка? Другими словами, как я могу проверить параметр самостоятельно без значения?Spring MVC: Как проверить, существует ли параметр, когда нет значения?

Вот код контроллера у меня сейчас:

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

На данный момент я не в том числе конфигурации безопасности я настроил , поскольку все остальное работает, и я хочу сосредоточить внимание на этом вопросе.

Заранее благодарим за любые предложения!

ответ

4

Хорошо, я понял (при перерыве). @RequestParam работает только тогда, когда на самом деле доступен параметр для сопоставления. Если такой параметр не передан, это бесполезно. Поэтому вместо этого я проверил карту, предоставленную 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"; 
} 

Теперь он отлично работает.

Смежные вопросы