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]

Reply via email to