Changing this:

    Integer startNumber = (Integer) getFieldValue(_startFieldName, object);
    if(startNumber == null) 
      addFieldError(_startFieldName, "Start Year is a required field.");

To this:

    Integer startNumber = (Integer) getFieldValue(_startFieldName, object);
    if(startNumber == null) {
      setDefaultMessage("Start Year is a required field.");
      addFieldError(_startFieldName, object);
    }

Seems to solve the problem. 

However, I did discover something strange. If a NPE is thrown in my
validator, the exception is swallowed. Any ideas on what could be causing
this. There's no information in my logs or shown in my browser (just
Tomcat's default 500 page).

uncaught exception
javax.servlet.ServletException
        at
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
        at
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
        at o

Thanks,

Matt


mraible wrote:
> 
> 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#a12099744
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