I have such custom validator:
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);
}
}
}
where I check closing operation dates. (is there some info for such period). Then I have form, where I attach that validator:
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);
}
}
the problem is, PeriodClosedValidator
always take just one object in code periodModel.setObject(new DimPeriod());
. How I can attach to custom validator new chosen object?
UPDATE How I can make custom validator? I want create something like that:
DropDownChoice period = new DropDownChoice("period", periodModel, periodList, new ChoiceRenderer<DimPeriod>("periodName", "id"));
period.add(new MyCustomValidator(param1, param2));
Where param1
and param2
some dates, which I want to validate.
Since your form has a selector giving a
DimPeriod
, you need to make a validator for that.Your validator class should be something like:
where I've skipped trying to actually write the validation. It's probably similar to what you've got, but getting the dates from
DimPeriod
object inside thevalidatable
argument.