java - Spring 或 JSP 显示多条相同的错误消息而不是一条

标签 java spring jsp spring-mvc message

我有下一个问题 - JSP(或 Spring)在登录/注册页面上显示相同的错误消息两次甚至多次。 为什么可以呢?我还没有发现有人遇到同样的问题。之前谢谢。

我还不能发图片,所以我把它发在这里pictures

我的Login.jsp

     <sf:form name="login"
      method="POST"
      action="${app}/login.do"
      modelAttribute="loginForm"
      enctype="application/x-www-form-urlencoded">  

      <label for="login">Login:</label> 
      <br><input name="login" id="login" type="text" value=""/> <br>      
      <sf:errors path="login" cssClass="error"/>
      <br>
      <br><label for="password">Password:</label>
      <br><input name="password" id="password" type="password" value=""/> <br>
     <sf:errors path="password" cssClass="error"/><br>
     <br> <input type="submit" name="submit" value="Login"/>
   </sf:form>

LoginController 类

     @Controller
     public class LoginController {
     //Log4j
     private static final Logger logger = Logger.getLogger(LoginController.class);

     public LoginController() {
     }

     @Qualifier("loginValidator")
     @Autowired
     private LoginValidator loginValidator;

     public LoginController(LoginValidator loginValidator) {
     this.loginValidator = loginValidator;
     }

     @InitBinder("loginForm")
     private void initBinder(WebDataBinder binder) {
        binder.setValidator(loginValidator);  
    }

     @Qualifier("userServiceImpl")
     @Autowired
     private UserService userService;

     @Qualifier("roleServiceImpl")
     @Autowired
     private RoleService roleService;

     @RequestMapping(value = "/login", method = RequestMethod.GET)
     public ModelAndView loginPage() {
     return new ModelAndView("login", "loginForm", new LoginForm());
     }



     @RequestMapping(value = "/login.do", method = RequestMethod.POST)
     public ModelAndView login(@ModelAttribute("loginForm")
                              @Valid LoginForm loginForm,
                              BindingResult bindingResult,
                              HttpServletRequest request, 
                              HttpServletResponse response) {
        BasicConfigurator.configure();
        logger.trace("check  authentication!");

        String login = request.getParameter("login");
        String password = request.getParameter("password");
        new ModelAndView("login", "loginForm", loginForm);
        loginValidator.validate(loginForm, bindingResult);
        try {
            if (bindingResult.hasErrors()) {
                return new ModelAndView("login", "loginForm", loginForm);
            } else {
                // If the user details is validated then redirecting the user to  
                welcome page,
                // else returning the error message on login page.
                User user = userService.authorization(login, password);
                if (user != null) {
                    request.getSession().setAttribute("user", user);
                    //Creating a redirection view to welcome page.
                    RedirectView redirectView = new RedirectView("welcome", true);
                    return new ModelAndView(redirectView);
                } else {
                    bindingResult.addError(new ObjectError("Invalid", "Invalid 
                     credentials. " + "Login or Password is incorrect."));
                    return new ModelAndView("login", "loginForm", loginForm);
                }
            }
        } catch (Exception e) {
            System.out.println("Exception in LoginController " + e.getMessage());
            e.printStackTrace();
            return new ModelAndView("login", "loginForm", loginForm);
        }
    }

LoginForm类

public class LoginForm {

    @NotBlank
    private String login;

    @NotBlank
    private String password;

...Getter and Setters

messages.properties 文件

login.required=Login is required!!
password.required=Password is required!!
password.again=Passwords do not match   
name.required=Name is required
email.required=Email is required
email.correct=Not correct recording format, example XYZ@gmail.com
email.again=Emails do not match

最佳答案

就像 @M.Deinum 提到的那样,您已经验证了表单两次。只需删除这一行:

loginValidator.validate(loginForm, bindingResult);

一切都应该没问题。因为您有 @Valid,所以您正在使用 JSR-303 来验证您的 bean。您不必通过手动调用 validate() 方法再次验证它。

关于java - Spring 或 JSP 显示多条相同的错误消息而不是一条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016500/

相关文章:

spring - @PathVariable 和@ModelAttribute 的区别

java - 如何在heroku中找到webservice路径?

java - XSSF。空指针异常

java - Android访问文件系统Nexus 7

java.lang.NoClassDefFoundError : net/sf/cglib/asm/util/TraceClassVisitor

spring - 如何在 Spring Integration 自定义消息处理程序中 Autowiring bean?

java - 如何创建提供自己的标记的链接?

java - 如何转义 fmt.tld 标签中的值

java - 无法使用 Struts 2 重定向 JSP 文件并显示值

java - 使用 jSTL 在 JSP 中预填充下拉列表