Java Spring自定义验证。使用自定义验证将单选按钮链接到字段

时间:2019-11-26 18:30:23

标签: java spring validation model-view-controller annotations

我有一个必须输入邮政编码(PC)的表格。根据选择的城市,如果PC错误,它将显示一条消息指出该错误。 想法是控制de PC前缀,如果所选城市是毕尔巴鄂,则前缀应为48。

这是Alumno类的字段:

public class Alumno {

    @NotNull
    @Size(min=2, message="Longitud incorrecta")
    private String nombre,apellido;
    private String optativa; 
    private String ciudadEstudios;  //selected city
    private String idiomasEstudios;
    @Email
    private String email;
    @Min(value=18, message="Debe ser mayor de 17 años.")
    @Max(value=99, message="No se lo cree nadie, amigo.")
    private int edad;
    @Pattern(regexp="[0-9]{5}",message="Codigo postal erroneo") 
    @CPostalBilbao //my custom validation
    private String codigoPostal; //the Postal Code field

我做了一个名为CPostalBilbao的自定义注释:

@Constraint(validatedBy = CPostalBilbaoValidacion.class) 
@Target({ElementType.METHOD, ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface CPostalBilbao {
    // definir el codigo postal por defecto
    public String value() default "48";

    // definir el mensaje de error
    public String message() default "El codigo postal debe comenzar por 48";

    //definir los grupos
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

还有一个名为CPostalBilbaoValidacion的自定义验证:

public class CPostalBilbaoValidacion implements
    ConstraintValidator<CPostalBilbao, String> {

    private String prefijoCP;

    @Override
    public void initialize(CPostalBilbao codigoCP) {

        prefijoCP = codigoCP.value(); //Se le pasa el numero 48
    }

    @Override
    public boolean isValid(String codigoIN, ConstraintValidatorContext cxt) {

        boolean isCodigoRight;

        if(codigoIN != null)
            isCodigoRight = codigoIN.startsWith(prefijoCP);
        else
            return isCodigoRight = false;


        return isCodigoRight;
    }

}

我看不到应该在何处以及如何链接单选按钮选择和邮政编码字段。 Spring框架中是否有某种方法可以正确执行此操作,还是我应该在Alumno.java或其控制器中自己执行此操作?也许在表单的xml中?

0 个答案:

没有答案