簡體   English   中英

如何根據按下的按鈕使用不同的驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM