我無法清除使用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