0

我有这样的自定义验证器:

public class PeriodClosedValidator implements IValidator<Date>{

    private Date dateStart;
    private Date dateEnd;

    public PeriodClosedValidator(Date dateStart, Date dateEnd) {
        this.dateStart = dateStart;
        this.dateEnd = dateEnd;
    }

    public void validate(IValidatable<Date> iv) {

        DateFormat sdf = new SimpleDateFormat("dd.MM.yy");

        DimCalendarDAO dimCalendarDao = new DimCalendarDAO(DimCalendar.class,      HibernateUtil.getSessionFactory());
        List<DimCalendar> list = dimCalendarDao.getOpenedOperDates(dateStart, dateEnd);
        StringBuilder errorMessage = new StringBuilder();
        int counter = 10;

        for (DimCalendar cal : list) {
            errorMessage.append(',');
            if (counter == 0) {
                errorMessage.append('\n');
                counter = 10;
            }
            errorMessage.append(sdf.format(cal.getDt()));
            counter--;
        }
        if (errorMessage.length() != 0) {
            ValidationError valError = new ValidationError();
            valError.addKey("error.close.date.period");
            valError.setVariable("dates", errorMessage.substring(1));
            iv.error(valError);
        }
    }
 }

我在哪里检查关闭操作日期。(有没有关于这段时间的一些信息)。然后我有表单,我在其中附加了该验证器:

public class Frm_2_11A extends BasePage{

    private DimPeriod periodPtr;
    private DimRegion regionPtr;

    private final List<DimPeriod> periodList;
    private final List<DimRegion> regionList;

    private IModel<DimPeriod> periodModel = new PropertyModel<DimPeriod>(this, "periodPtr");
    private IModel<DimRegion> regionModel = new PropertyModel<DimRegion>(this, "regionPtr");

    public Frm_2_11A() {
        super();

        periodList = // get list of period;
        regionList = // get list of region;

        periodModel.setObject(new DimPeriod());

        DropDownChoice period = new DropDownChoice("period", periodModel, periodList, new ChoiceRenderer<DimPeriod>("periodName", "id"));
        period.setRequired(true);
        period.add(new PeriodClosedValidator(periodModel.getObject().getPeriodStart(), periodModel.getObject().getPeriodEnd()));

        DropDownChoice region = new DropDownChoice("region", regionModel, regionList, new ChoiceRenderer<DimRegion>("name", "code"));
        region.setRequired(true);

        Form form = new Form("frm_2_11A"){
            //do something if OK
        };
        form.add(period);
        form.add(region);
        add(new FeedbackPanel("feedback"));
        add(form);
    }

}

问题是,PeriodClosedValidator在代码中总是只取一个对象periodModel.setObject(new DimPeriod());。如何附加到自定义验证器新选择的对象?

更新 如何制作自定义验证器?我想创建类似的东西:

DropDownChoice period = new DropDownChoice("period", periodModel, periodList, new ChoiceRenderer<DimPeriod>("periodName", "id"));
period.add(new MyCustomValidator(param1, param2));

我想验证的地点param1和日期。param2

4

1 回答 1

1

由于您的表单有一个选择器DimPeriod,因此您需要为此创建一个验证器。

你的验证器类应该是这样的:

public class DimPeriodValidator implements IValidator<DimPeriod> {
    @Override
    public void validate(IValidatable<DimPeriod> validatable) {
        //Validation logic here
    }
}

我跳过了尝试实际编写验证的地方。它可能与您所拥有的类似,但从参数中的DimPeriod对象获取日期validatable

于 2014-11-30T14:23:41.587 回答