[英]How to use different validations depending the button pressed
我有這個。
public class ExampleForm implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer idexample;
private String name;
private SomeEntity1 someEntity1;
private SomeEntity2 someEntity2;
// Constructor, getters and setters...
}
我在jsp中有2種形式,第一種僅使用SomeEntity1
,第二種使用SomeEntity2
。 如何在同一控制器中進行單獨驗證? 這是可能的?。 我的主要問題是,如果我嘗試SomeEntity2
它將嘗試驗證第一個,並且為Null。
編輯:添加了控制器代碼。
@InitBinder
protected void initBinder(final WebDataBinder binder) {
final CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
binder.registerCustomEditor(Date.class, editor);
if (binder.getTarget() instanceof ExampleForm) {
binder.setValidator(this.ExampleValidator);
}
}
@RequestMapping(value = "/ex/addEntity1", method = RequestMethod.GET)
public String addfirst(@Valid @ModelAttribute final ExampleForm exampleForm, final ModelMap model, final HttpSession session) {
//Do some stuff
}
@RequestMapping(value = "/ex/addEntity2", method = RequestMethod.GET)
public String addsecond(@Valid @ModelAttribute final ExampleForm exampleForm, final ModelMap model, final HttpSession session) {
//Do some stuff
}
在您的情況下,對每個實體實施不同的Validator
可能會有用,而不是使用@Valid
批注。
然后在您的控制器方法中,編寫類似的代碼:
public String addEntityX(@ModelAttribute final ExampleForm exampleForm, BindingResult result) {
new EntityXValidator().validate(exampleForm, result);
if (result.hasErrors()) {
// ...
}
else{
// ...
}
// ...
}
如果您使用排他或外鍵,則您的數據模型可能是錯誤的。 使用繼承。 您還應該使用POST而不是GET提交表單。
您應該使用驗證組和Spring的@Validated注釋:
Scenario1.class:
public interface Scenario1 extends Default() {};
Scenario2.class:
public interface Scenario2 extends Default() {};
ExampleForm.class:
public class ExampleForm implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer idexample;
private String name;
@NotNull( groups = { Scenario1.class } )
private SomeEntity1 someEntity1;
@NotNull( groups = { Scenario2.class } )
private SomeEntity2 someEntity2;
// Constructor, getters and setters...
}
控制器:
/* if users clicks submit button named "scenario1" */
@RequestMapping( method = RequestMethod.POST, params="scenario1" )
String publish( @Validated({Scenario1.class}) ExampleForm exampleForm, BindingResult result)) {
...
}
/* if user clicks submit button named "scenario2" */
@RequestMapping( method = RequestMethod.POST, params="scenario2" )
String publish( @Validated({Scenario2.class}) ExampleForm exampleForm, BindingResult result)) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.