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
クラスにUserValidator
でsupports
方法を変更する必要があると思う
をありがとう、それとUserDTOにvalidateメソッドでユーザーを変更するには、助けました。 Hovewerが無効なフォームを提出しようとした後に別のエラーが発生しました - org.springframework.context.NoSuchMessageException:ロケール 'pl_PL'のコード 'NotEmpty.userForm.name.userDTO.name'の下にメッセージが見つかりませんでした。それを取り除く方法、またはローカライズされたメッセージを追加する方法 – Arageron
これは、キー 'NotEmpty.userForm.name.userDTO.name'を使用して、そのエラーに対して表示するテキストを探しています。それはmessages.propertiesファイルにありますか?同様の回答を参照してください:https://stackoverflow.com/a/12257303/4505142 –
これはvalidation.propertiesファイルにあります。 messages.propertiesの名前を確かめようとしましたが、どこにでもメッセージが設定されていないことに気付きました。 – Arageron