我无法清除使用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>
MODEL:
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验证器拒绝一个字段,就没有办法清除它。在拒绝之前,您必须先清除该字段(这是自定义验证程序方法将起作用的原因)。使用上面的方法,出现验证/拒绝之前,我可以得到目标的保持,我不能让过去的缓存字段值。任何帮助将不胜感激。
* UPDATE * 以下链接包含一个非常类似的问题:
http://forum.springsource.org/showthread.php?50762-Clear-form-field-after-failed-validation
提供的解决方案正是我宁愿不要做。
我试图左右逢源,它仍然无法正常工作。我在前面的方法中将obj添加到ModelAndView中。它通过在类级定义的SessionAttributes注释存储在会话中。 – javagruffian
更新的问题。 – javagruffian
如果您删除会话内容,它会工作吗? – Ralph