2017-05-26 20 views
2

私はSpringでの検証に問題があります。何が最初に動作するかどうかチェックしたい、当分の間、バリデータの対象が無効です - Spring MVC

java.lang.IllegalStateException: Invalid target for Validator [[email protected]]: [email protected] 

マイバリ:私は、フォームを開いた後、次のエラーを取得しています

@Component 
public class UserValidator implements Validator { 

    @Autowired 
    ServiceUser serviceUser; 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return User.class.equals(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 

     User user = (User) target; 

     ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "NotEmpty.userForm.name"); 

    } 

} 

はコントローラー:

@Controller 
public class UserController { 
    @Autowired 
    UserValidator userValidator; 

    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
     CustomDateEditor editor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true, 10); 
     binder.registerCustomEditor(Date.class, editor); 
     binder.setValidator(userValidator); 
//  binder.addValidators(userValidator); 
    } 

    final static Logger logger = Logger.getLogger(UserController.class); 

    @Autowired 
    protected ServiceUserImpl service; 


    @RequestMapping("/lista") 
    public String showIndex(Model model) { 
     User contest = new User(); 
     model.addAttribute("element", contest); 
     model.addAttribute("collection", service.findAll()); 
     return "lista"; 
    } 

    @RequestMapping("/dodaj") 
    public String showFormPublication(HttpServletRequest request, @ModelAttribute("userDto") @Valid UserDTO userDTO, BindingResult result) { 
     if (request.getMethod().equalsIgnoreCase("post") && !result.hasErrors()) { 
      if (result.hasErrors()) { 
       return "forms/contest"; 
      } else { 
       User user = new User(); 
       user.setId(userDTO.getId()); 
       user.setName(userDTO.getName()); 
       user.setSurname(userDTO.getSurname()); 
       user.setDateOfBirth(userDTO.getDateOfBirth()); 
       user.setIndexNumber(userDTO.getIndexNumber()); 
       user.setEmail(userDTO.getEmail()); 
       service.save(user); 

       return "redirect:/lista"; 
      } 
     } 
     return "dodaj"; 
    } 
} 

.jsp形式:

<form:form action="dodaj" method="POST" modelAttribute="userDto"> 
     <table border="1"> 
      <tbody> 
      <tr> 
       <th>Imię</th> 
       <td> 
        <form:input type="text" path="name" /> 
        <c:if test="${pageContext.request.method=='POST'}"><form:errors path="name" /></c:if> 
       </td> 
      </tr> 
      <tr> 
       <th>Nazwisko</th> 
       <td> 
        <form:input type="text" path="surname" /> 
        <c:if test="${pageContext.request.method=='POST'}"><form:errors path="surname" /></c:if> 
       </td> 
      </tr> 
      <tr> 
       <th>DataUrodzenia</th> 
       <td> 
        <form:input type="date" path="dateOfBirth" /> 
        <c:if test="${pageContext.request.method=='POST'}"><form:errors path="dateOfBirth" /></c:if> 
       </td> 
      </tr> 
      <tr> 
       <th>NumerIndeksu</th> 
       <td> 
        <form:input type="number" path="indexNumber" /> 
        <c:if test="${pageContext.request.method=='POST'}"><form:errors path="indexNumber" /></c:if> 
       </td> 
      </tr> 
      <tr> 
       <th>Email</th> 
       <td> 
        <form:input type="text" path="email" /> 
        <c:if test="${pageContext.request.method=='POST'}"><form:errors path="email" /></c:if> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="2" align="right"><input type="submit" value="Dodaj!" /></td> 
      </tr> 
      </tbody> 
     </table> 
    </form:form> 

@InitBinderの隣に( "userDto")を追加しようとしましたが、残念なことに助けになりませんでした。適用可能な解決策に関してはそれほど多くを発見していない。私がここに掲示しなければならないことがあれば、私に知らせてください。私はリポジトリへのリンクを提供することもできます誰もがそれを実行しようと熱心である必要があります。私はあなたがUserDTOクラスにUserValidatorsupports方法を変更する必要があると思う

答えて

0

public boolean supports(Class<?> clazz) { 
    return UserDTO.class.equals(clazz); 
} 
+0

をありがとう、それとUserDTOにvalidateメソッドでユーザーを変更するには、助けました。 Hovewerが無効なフォームを提出しようとした後に別のエラーが発生しました - org.springframework.context.NoSuchMessageException:ロケール 'pl_PL'のコード 'NotEmpty.userForm.name.userDTO.name'の下にメッセージが見つかりませんでした。それを取り除く方法、またはローカライズされたメッセージを追加する方法 – Arageron

+0

これは、キー 'NotEmpty.userForm.name.userDTO.name'を使用して、そのエラーに対して表示するテキストを探しています。それはmessages.propertiesファイルにありますか?同様の回答を参照してください:https://stackoverflow.com/a/12257303/4505142 –

+0

これはvalidation.propertiesファイルにあります。 messages.propertiesの名前を確かめようとしましたが、どこにでもメッセージが設定されていないことに気付きました。 – Arageron

関連する問題