Spring Annotation с пользовательской проверкой потери значений - PullRequest
1 голос
/ 03 апреля 2011

Я новичок в весне. Проблема у меня заключается в том, что моя форма не заполняется исходными значениями при возвращении из проверки. Причина, по которой я реализую интерфейс Validator (вместо использования аннотации проверки), заключается в том, что я проверяю БД на наличие имени пользователя. Вот мой код (теги html опущены).

JSP:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<form:form action="register.html" commandName="userCommand" method="POST">
   <form:errors path="*" cssClass="redBold"/>
   Username: 
      <form:input path="username"/><form:errors path="username" cssClass="error" />
   Password:
      <form:password path="password"/>
   Retype password: 
      <form:password path="password2"/>
   Sex:
      <form:radiobutton path="sex" value="F" label="Female"/>
      <form:radiobutton path="sex" value="M" label="Male"/>
   Date of birth:   
      <form:select path="dobDay" items="${dobDays}"/>
      <form:select path="dobMonth" items="${dobMonths}"/>
      <form:select path="dobYear" items="${dobYears}"/>
   Postcode:
      <form:input path="postcode"/>
   <input type="submit" value="Register" class="button"/>
</form:form>

Контроллер:

@Controller
@RequestMapping("/register.*")
public class UserRegistrationController {
   @RequestMapping(method = RequestMethod.POST)
   public ModelAndView submitForm(HttpServletRequest request, @ModelAttribute("userCommand") User user, BindingResult result) throws Exception {
      UserRegistrationValidator validator = new UserRegistrationValidator();
      validator.validate(user, result);
      if(result.hasErrors()){
         // when returning from here I dont see values in the JSP form 
         return new ModelAndView("redirect:/register.html","userCommand",user);
      }
        // more code 
        return new ModelAndView("redirect:/home.html");
    }
}

Validator:

@Component
public class UserRegistrationValidator implements Validator {
   private UserService userService;
   @Autowired
   public void setUserService(UserService userService) {
      this.userService = userService;
   }
   @Override
      public boolean supports(Class clazz) {
      return User.class.equals(clazz);
   }
   @Override
   public void validate(Object obj, Errors error) {
      User user = (User) obj;
      ValidationUtils.rejectIfEmpty(error, "username", "mandatory");
      if (userService.exists(user.getUsername()){
         error.rejectValue("username", null, "*");
      }
      if (user.getPostcode() == null || "".equals(user.getPostcode().toString())){
         error.rejectValue("postcode", null, "*");
      }
   }
}

Большое спасибо!

1 Ответ

2 голосов
/ 04 апреля 2011

до тех пор, пока вы используете перенаправление, пользовательская команда не будет передаваться на перенаправленный URL.

не пытаться перенаправить, если отправленная команда недействительна

return new ModelAndView("register.html","userCommand",user);

или, может быть, вы можете сохранить команду пользователя в сеансе, если вы все еще хотите использовать перенаправление, но я думаю, что это не очень хорошая практика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...