Validating with Multiple Validators
Some validation logic is common and can be extracted into shared validation logic. Request validation can then consist of common plus specific parts, as shown below:
@ValidBy({LoginFormValidation.class, DataBaseValidation.class})
public class LoginForm {
...
}
Scenario-based validation means that during validation, developers can use the scenario name passed to the form validator to perform necessary logic checks:
doValidLogin: handles login.doValidSignUp: handles registration.
public class LoginFormValidation4Scene implements Validation<LoginForm4Scene> {
// Login validation.
private void doValidLogin(LoginForm4Scene dataForm, ValidInvoker errors) {
...
}
// Signup validation.
private void doValidSignUp(LoginForm4Scene dataForm, ValidInvoker errors) {
...
}
public void doValidation(String validType, LoginForm4Scene dataForm, ValidInvoker errors) {
// Common validation logic.
if (StringUtils.isBlank(dataForm.getAccount())) {
errors.addError("account", "Account is empty.");
}
if (StringUtils.isBlank(dataForm.getPassword())) {
errors.addError("password", "Password is empty.");
}
if (!errors.isValid()) {
return;
}
// Scenario differences.
if (StringUtils.equalsIgnoreCase("signup", validType)) {
this.doValidSignUp(dataForm, errors); // Signup.
return;
}
if (StringUtils.equalsIgnoreCase("login", validType)) {
this.doValidLogin(dataForm, errors); // Login.
return;
}
}
}
Finally, pass the scenario name through ValidInvoker#doValid(scene, object).
@MappingTo("/scene/login.do")
public class Login4Scene {
@Any
public void execute(@ParameterGroup LoginForm4Scene loginForm,
RenderInvoker invoker,
ValidInvoker valid) {
valid.doValid("login", loginForm);
...
}
}