Thanx Gilles.
On 7/18/06, Gilles DEMARTY <[EMAIL PROTECTED]> wrote:
the validator must be done on the second inputCalendar, since the data
is not loaded before. You shoud adapt the valildate method accordingly
2006/7/18, Ali Abdel-Aziz Ali < [EMAIL PROTECTED]>:
> Hello All,
>
> I have Custom Validator problem.
> I have two input calenders and I want to make some validation on their
> values
> any validation.
>
> so this the UI code:
>
> <h:outputText value="From Date:" style="font-weight:bold"/>
> <t:inputCalendar id="FromDate"
> monthYearRowClass="yearMonthHeader"
> weekRowClass="weekHeader"
>
> currentDayCellClass="currentDayCell"
> value="#{positionPopup.fromDate}" renderAsPopup="true"
>
> popupTodayString="#{example_messages['popup_today_string']}"
> popupWeekString="#{example_messages['popup_week_string']}"
> renderPopupButtonAsImage="true" required="true"
> styleClass="required">
> <f:validator validatorId="
> validators.datesOverlapValidator"/>
> </t:inputCalendar>
>
> <h:outputText value="Thru Date:" style="font-weight:bold" />
> <t:inputCalendar id="ThruDate"
> monthYearRowClass="yearMonthHeader"
> weekRowClass="weekHeader"
>
> currentDayCellClass="currentDayCell"
> value="#{ positionPopup.thruDate}" renderAsPopup="true"
>
> popupTodayString="#{example_messages['popup_today_string']}"
> popupWeekString="#{example_messages['popup_week_string']}"
> renderPopupButtonAsImage="true"
> required="false">
> </t:inputCalendar>
>
> and this is the validator code:
>
> public void validate(FacesContext facesContext, UIComponent uiComponent,
> Object value) throws ValidatorException
> {
> if (facesContext == null) throw new
> NullPointerException("facesContext");
> if (uiComponent == null) throw new
> NullPointerException("uiComponent");
> if (value == null)
> {
> return;
> }
>
> UIComponent foreignComp =
> uiComponent.getParent().findComponent(_for); // _for = "ThruDate" //
> equall to the second inputCalender ID
> if(foreignComp==null)
> throw new FacesException("Unable to find component '" + _for
> + "' (calling findComponent on component '" + uiComponent.getId() + "')");
> if(false == foreignComp instanceof EditableValueHolder)
> throw new FacesException("Component '" + foreignComp.getId()
> + "' does not implement EditableValueHolder");
> EditableValueHolder foreignEditableValueHolder =
> (EditableValueHolder) foreignComp;
>
> if ( foreignEditableValueHolder.isRequired() &&
> foreignEditableValueHolder.getValue()== null )
> {
> return;
> }
>
> Object[] args =
> {value.toString(),(foreignEditableValueHolder.getValue()==null)
> ?
> foreignComp.getId():foreignEditableValueHolder.getValue().toString()};
>
> _logger.info(" From Date = "+ args[0].toString() +" Thrue Date
> = "+foreignEditableValueHolder.getValue());
>
>
> boolean overlap = this.overlap ( new Range(new Date(1), new
> Date(2)), new Range(new Date(1), new Date(2)));
> if(!overlap)
> {
>
> //if(foreignEditableValueHolder.getValue()==null ||
> !foreignEditableValueHolder.getValue().toString().equals(
> value.toString()) )
>
> FacesMessage message = new FacesMessage();
>
> message.setDetail(Messages.getMessageString("RangeOverlapValidator")+" "+
> args[0].toString() +" "+args[1].toString() + ".");
>
> message.setSummary (Messages.getMessageString("RangeOverlapValidator")+" "+
> args[0].toString() +" "+args[1].toString() + ".");
> message.setSeverity (FacesMessage.SEVERITY_ERROR );
> throw new ValidatorException(message);
> }
> }
>
> but it always return the ThruDate = null however it can feel with it's
> properties like isRequired or not.
>
> Can Any buddy help?
> --
> Ali Abdel-Aziz
> http://www.aliabdelaziz.com
> http://aabdelaziz.blogspot.com
--
Ali Abdel-Aziz
http://www.aliabdelaziz.com
http://aabdelaziz.blogspot.com

