У меня возникают проблемы при очистке поля ввода формы с использованием проверки бинов при проверке ограничения. У меня есть форма ввода, которая не может превышать 50 символов, поэтому я хочу отобразить сообщение и очистить поле, если пользователь взломает страницу и превысит лимит символов. Я попытался просто очистить связанное поле, но это не работает. Независимо от того, что я делаю, кэшированное значение (значение, которое было отклонено проверкой bean-компонента) всегда остается в поле ввода. Мой код выглядит следующим образом:
JSP:
<form:form action="submit.do" method="POST" commandName="obj">
<form:input id="field1" path="field1" cssClass="box" size="50" maxlength="50"/>
<p><input class="action" type="submit" name="enter.x" value="Submit" /></p>
</form:form>
МОДЕЛЬ:
public class Obj{
@Length(max=50, message="Length invalid.")
private String field1;
// Getter and setter
}
CONTROLLER:
@SessionAttributes ({"obj"})
public class NavController{
@RequestMapping(value="show.do", method=RequestMethod.POST)
public ModelAndView submitUpdateObj(
HttpServletRequest request
, HttpServletResponse response
,@ModelAttribute
@Valid
Obj obj
,BindingResult result
) {
ModelAndView mav = new ModelAndView();
if(result.hasErrors()){
// clear bound value
obj.setField1("");
// add error messages to request
mav.setViewName("update");
}else{
mav.setViewName("register");
}
return mav;
}
}
Я могу заставить это работать, создав собственный Validator и создав / вызывая DataBinder в контроллере, но я пытаюсь избежать программной проверки этого объекта (без вложенной логики if / else). Похоже, что как только средство проверки бинов отклоняет поле, его невозможно очистить. Вы должны очистить поле, прежде чем оно будет отклонено (именно поэтому будет работать пользовательский метод проверки). Используя описанный выше метод, проверка / отклонение происходит до того, как я могу взять объект и не могу получить значение кэшированного поля. Любая помощь будет принята с благодарностью.
* ОБНОВЛЕНИЕ *
Следующая ссылка содержит очень похожую проблему:
http://forum.springsource.org/showthread.php?50762-Clear-form-field-after-failed-validation
Предлагаемое решение - именно то, что я предпочел бы НЕ делать.