【发布时间】:2011-11-01 06:40:17
【问题描述】:
在验证约束时,我无法使用 Bean 验证清除表单输入字段。我有一个可能不超过 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
}
控制器:
@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;
}
}
我可以通过创建自定义验证器并在控制器中实例化/调用 DataBinder 来实现此功能,但我试图避免以编程方式验证此对象(没有嵌套的 if/else 逻辑)。似乎只要 bean 验证器拒绝一个字段,就没有办法清除它。您必须在字段被拒绝之前清除该字段(这就是自定义验证器方法起作用的原因)。使用上面的方法,验证/拒绝发生在我获得对象之前,我无法超过缓存的字段值。任何帮助将不胜感激。
* 更新 * 以下链接包含一个非常相似的问题:
http://forum.springsource.org/showthread.php?50762-Clear-form-field-after-failed-validation
提供的解决方案正是我不想做的。
【问题讨论】:
标签: java spring jsp spring-mvc bean-validation