I have the following validation XML that suites my needs perfectly:
<field name="startYear">
<field-validator type="required">
<message>Start year is required.</message>
</field-validator>
<field-validator type="int">
1900
<message>Please enter a date after 1900.</message>
</field-validator>
<field-validator type="fieldexpression">
startYear gte currentYear
<message>Start year must be less than or equal to the current year
(${currentYear}).</message>
</field-validator>
</field>
<field name="endYear">
<field-validator type="required">
<message>End year is required.</message>
</field-validator>
<field-validator type="int">
1900
<message>Please enter a date after 1900.</message>
</field-validator>
<field-validator type="fieldexpression">
endYear lt startYear
<message>End Year must be after Start year.</message>
</field-validator>
</field>
I'd like to turn this into a Java class so I can have the following XML
instead:
<validator type="monthyear">
<message/>
</validator>
Is this possible?
I've given it a shot and I'm having some difficulty figuring out how to add
field errors so they appear in the proper location (next to the fields) in
my form. Here's the code I have so far. I realize that addFieldError() is
not supposed to take the error message as its 2nd argument, but I think it
helps convey what I'm trying to do.
public class MonthYearRangeValidator extends ValidatorSupport
{
private String _startFieldName = "startYear";
private String _endFieldName = "endYear";
public void validate(Object object)
throws ValidationException
{
Integer startNumber = (Integer) getFieldValue(_startFieldName, object);
if(startNumber == null)
addFieldError(_startFieldName, "Start Year is a required field.");
Integer endNumber = (Integer) getFieldValue(_endFieldName, object);
if(endNumber == null) {
addFieldError(_endFieldName, "End Year is a required field.");
}
if(!getValidatorContext().getFieldErrors().isEmpty())
return;
if (startNumber < 1900) {
addFieldError(_startFieldName, "Please enter a date after 1900.");
}
if (endNumber < 1900) {
addFieldError(_endFieldName, "Please enter a date after 1900.");
}
if(!getValidatorContext().getFieldErrors().isEmpty())
return;
if (startNumber < Calendar.getInstance().get(Calendar.YEAR)) {
addFieldError(_startFieldName, "Start year must be less than or equal
to the current year.");
}
if (endNumber < startNumber) {
addFieldError(_endFieldName, "End Year must be after Start year.");
}
}
public void setStartFieldName(String startFieldName)
{
_startFieldName = startFieldName;
}
public void setEndFieldName(String endFieldName)
{
_endFieldName = endFieldName;
}
}
Thanks,
Matt
--
View this message in context:
http://www.nabble.com/-s2--How-do-I-create-a-custom-date-range-validator--tf4245411.html#a12081467
Sent from the Struts - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]