# Clientseitiger Validator in rich:calendar



## computersport (24. Jan 2012)

Moin,

ich will mein rich:calender Element einen Validator anhängen.
Dieser soll überprüfen ob das angegebene Datum 6 Monate vom 
heutigen Datum in der Vergangenheit liegt.

Wichtig für mich ist das ich keinen customValidator dafür schreibe,
sondern einen StandardValidator verwende.

Hat jemand einen Hinweis wo man das genauer nachlesen könnte?

grüße

Compi


----------



## Sym (24. Jan 2012)

Ich denke, das geht nur über einen CustomValidator, der an dieser Stelle auch ziemlich trivial ist. Nutzt Du JSF1 oder JSF2? Werktage oder normale Tage?


----------



## computersport (24. Jan 2012)

Ich glaube das ich JSF 1.1 nutze.

Es wird mit normalen Tagen gerechnet.


----------



## Sym (24. Jan 2012)

Ungefähr so sollte das aussehen:


```
package de.larmic.web.validator;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

...

public class OlderThan60DayValidator implements Validator {

   private static final String ERROR_MESSAGE_KEY = "error.ui.validator.olderThan60DayValidator.dateRangeToShort";
   private static final int MIN_NUMBER_OF_PAST_MONTH = 6;

   @Override
   public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
      if (!(value instanceof Date)) {
         // TODO throw illegal argument exception
      }

      Calendar calendar = GregorianCalendar.getInstance(Locale.GERMAN);
      calender.add(Calendar.MONTH, (-1)*MIN_NUMBER_OF_PAST_MONTH);

         if (((Date) value).before(calendar.getTime())) {
            final String errorMsg = "" // TODO get message from properties

            final FacesMessage message = new FacesMessage(ERROR_MESSAGE_KEY);
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            message.setSummary(errorMsg);
            message.setDetail(errorMsg);

            throw new ValidatorException(message);
         }
   }
}
```

Der Validator muss dann noch in der faces-config.xml eingetragen werden

[xml]<faces-config xmlns="http://java.sun.com/JSF/Configuration">
   ...
   <validator>
     <validator-id>de.larmic.web.validator.OlderThan60DayValidator</validator-id>
     <validator-class> de.larmic.web.validator.OlderThan60DayValidator </validator-class>
   </validator>
   ...
 </faces-config>[/xml]

Hilft Dir das weiter?


----------



## computersport (25. Jan 2012)

Ja das hilft mir sehr. Danke dafür.


----------



## agent0013 (19. Mrz 2012)

Hi,

ich hab auch so ähnliches problem.
Bei mir muss das programm testen, ob vom Benutzer eingegebenes Datum korrekt ist.
Ich hab das geschrieben,aber scheint nicht richtig zu sein:


```
static Calendar calendar = Calendar.getInstance();
	private static int dayOfMonth;
	private static int month;
	private static int year;

	private static boolean testCorrectDate(Date dateToCheck) {
		boolean correct;

		correct = false;

		if (dayOfMonth == Calendar.DAY_OF_MONTH && month == Calendar.MONTH
				&& year == Calendar.YEAR) {
			correct = true;
		}

		return correct;
	}
```

Ich weiß nicht,wie ich es hinkriegen soll... 
vllt hat jemand Ahnung??

Danke


----------



## agent0013 (19. Mrz 2012)

Ich weiß nicht ob ich hier richtig bin..?
vllt hätte ich es in anfänger Themen schreiben sollen?? ???:L


----------

