Hi!
I have a problem with a validator, this time with a custom validator used as
custom JSP action inside a JSF page. The validator is a "laterThan"
validator, which compares two dates when I try to save the form.
I use the following tag only one time in the JSP page, but the validator is
invoked 5 times when a validation error occurs:
<custom:validateLater than="umfragebeginn" />
You can see the multiple invocations in the logging output from the process
validations phase (entering validate()...leaving validate()):
2006-01-05 18:49:05,031 DEBUG [org.apache.myfaces.lifecycle.LifecycleImpl]
entering processValidations in org.apache.myfaces.lifecycle.LifecycleImpl
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isLehrevalChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isLehrevalChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isMitarbeiterBefrChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isMitarbeiterBefrChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isLehrevalChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isMitarbeiterBefrChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isLehrevalChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isLehrevalChosen()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering validate()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering formatDate()
2006-01-05 18:49:05,031 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] date = Thu Jan 05 01:00:00 CET 2006
2006-01-05 18:49:05,031 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] formatted date (converter) = 05.01.06
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving formatDate()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedErrorMessage()
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,031 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil]
Parameter: params=[Ljava.lang.Object;@129714a,
key=validator.laterThan.notLater
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getMessageFromBundle()
2006-01-05 18:49:05,031 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] key =
validator.laterThan.notLater
2006-01-05 18:49:05,031 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum {0} folgt.
2006-01-05 18:49:05,031 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum 05.01.06
folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] error msg = [EMAIL PROTECTED]
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering formatDate()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] date = Thu Jan 05 01:00:00 CET 2006
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] formatted date (converter) = 05.01.06
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving formatDate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil]
Parameter: params=[Ljava.lang.Object;@16d64b9,
key=validator.laterThan.notLater
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] key =
validator.laterThan.notLater
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum {0} folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum 05.01.06
folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] error msg = [EMAIL PROTECTED]
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering formatDate()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] date = Thu Jan 05 01:00:00 CET 2006
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] formatted date (converter) = 05.01.06
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving formatDate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil]
Parameter: params=[Ljava.lang.Object;@1e72538,
key=validator.laterThan.notLater
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] key =
validator.laterThan.notLater
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum {0} folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum 05.01.06
folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] error msg = [EMAIL PROTECTED]
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering formatDate()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] date = Thu Jan 05 01:00:00 CET 2006
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] formatted date (converter) = 05.01.06
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving formatDate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil]
Parameter: params=[Ljava.lang.Object;@10a9d01,
key=validator.laterThan.notLater
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] key =
validator.laterThan.notLater
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum {0} folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum 05.01.06
folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] error msg = [EMAIL PROTECTED]
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] entering formatDate()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] date = Thu Jan 05 01:00:00 CET 2006
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] formatted date (converter) = 05.01.06
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving formatDate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil]
Parameter: params=[Ljava.lang.Object;@52578c,
key=validator.laterThan.notLater
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] entering
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] key =
validator.laterThan.notLater
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum {0} folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getMessageFromBundle()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] msg =
Bitte ein Umfrageendedatum eingeben, das dem Umfragebeginndatum 05.01.06
folgt.
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedMessageFromBundle()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.FacesMessageUtil] leaving
getParameterisedErrorMessage()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] error msg = [EMAIL PROTECTED]
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThanValidato
r] leaving validate()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isSonstUmfragenChosen()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.UmfrVorlFormValid
atorBacking] entering validateErgPubEnde()
2006-01-05 18:49:05,046 DEBUG
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.UmfrVorlFormValid
atorBacking] AuswSicherheit: Umfragemanager only - no validation necessary
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.utils.validator.UmfrVorlFormValid
atorBacking] leaving validateErgPubEnde()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isSonstUmfragenChosen()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isCreating()
2006-01-05 18:49:05,046 INFO
[de.fhzw.portal.umfragesystem.view.backing.management.UmfrVorlFormBacking]
entering/leaving isLehrevalChosen()
2006-01-05 18:49:05,046 DEBUG [org.apache.myfaces.lifecycle.LifecycleImpl]
exiting from lifecycle.execute in processValidations because
getRenderResponse is true from one of the after listeners
2006-01-05 18:49:05,046 DEBUG [org.apache.myfaces.lifecycle.LifecycleImpl]
entering renderResponse in org.apache.myfaces.lifecycle.LifecycleImpl
2006-01-05 18:49:05,046 DEBUG
[org.apache.myfaces.application.jsp.JspViewHandlerImpl] Dispatching to
/Management/UmfrVorlForm.jsp
The Problem is furthermore, that the h:messages, which outputs the error
summary of this page, does also print out the summary 5 times, so that the
user is directly confronted with this misbehaviour.
As I could observe, the multiple invocations or at least the multiple error
message print-outs must have sth. to do with the amount of visits of the
page. Each time a leave the page to a subform (immediate action), and than
return to the page and try to save the form, the error message is printed
out one more time.
What I also could see from the logging output of the rendered view, that one
validator tag (which is used only one time per component) is printed many
times, regardless of the validator type (built-in or custom), e. g.:
Custom validator:
<org.apache.myfaces.custom.calendar.HtmlInputCalendar id="umfrageende"
forceIdIndex="true" accesskey="NULL" addResources="true" alt="NULL"
converter="[EMAIL PROTECTED]"
currentDayCellClass="currentDayCell" dayCellClass="NULL" dir="NULL"
disabled="#{UmfrVorlFormBacking.vorlageAndererAutor}"
enabledOnUserRole="NULL" family="javax.faces.Input" immediate="false"
lang="NULL" localValue="NULL" localValueSet="false" maxlength="-2147483648"
monthYearRowClass="yearMonthHeader" onblur="NULL" onchange="NULL"
onclick="NULL" ondblclick="NULL" onfocus="NULL" onkeydown="NULL"
onkeypress="NULL" onkeyup="NULL" onmousedown="NULL" onmousemove="NULL"
onmouseout="NULL" onmouseover="NULL" onmouseup="NULL" onselect="NULL"
popupButtonString="NULL" popupDateFormat="NULL" popupGotoString="NULL"
popupScrollLeftMessage="NULL" popupScrollRightMessage="NULL"
popupSelectDateMessage="NULL" popupSelectMonthMessage="NULL"
popupSelectYearMessage="NULL" popupTodayString="Heute ist"
popupWeekString="Wo" readonly="#{UmfrVorlFormBacking.vorlageAndererAutor}"
renderAsPopup="true" renderPopupButtonAsImage="true" rendered="true"
rendererType="org.apache.myfaces.Calendar" rendersChildren="false"
required="true" size="-2147483648" style="NULL" styleClass="NULL"
submittedValue="05.01.06" tabindex="NULL" title="NULL" transient="false"
valid="false" validator="NULL"
value="#{UmfrVorlFormBacking.dfVorlageBasis.umfrEnde}"
valueChangeListener="NULL" visibleOnUserRole="NULL"
weekRowClass="weekHeader">
<de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThan
Validator/>
<de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThan
Validator/>
<de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThan
Validator/>
<de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThan
Validator/>
<de.fhzw.portal.umfragesystem.view.backing.utils.validator.LaterThan
Validator/>
</org.apache.myfaces.custom.calendar.HtmlInputCalendar>
Or built-in validator:
<html.ext.HtmlInputText id="kennwort" forceIdIndex="true" accesskey="NULL"
alt="NULL" converter="NULL" dir="NULL" disabled="false"
displayValueOnly="false" displayValueOnlyStyle="NULL"
displayValueOnlyStyleClass="NULL" enabledOnUserRole="NULL"
family="javax.faces.Input" immediate="false" lang="NULL" localValue=""
localValueSet="true" maxlength="256" onblur="NULL" onchange="NULL"
onclick="NULL" ondblclick="NULL" onfocus="NULL" onkeydown="NULL"
onkeypress="NULL" onkeyup="NULL" onmousedown="NULL" onmousemove="NULL"
onmouseout="NULL" onmouseover="NULL" onmouseup="NULL" onselect="NULL"
readonly="#{UmfrVorlFormBacking.vorlageAndererAutor}" rendered="true"
rendererType="org.apache.myfaces.Text" rendersChildren="false"
required="false" setDisplayValueOnly="false" size="50" style="NULL"
styleClass="NULL" submittedValue="NULL" tabindex="NULL" title="Textfeld zur
Eingabe des Kennworts" transient="false" valid="true" validator="NULL"
value="#{UmfrVorlFormBacking.dfVorlageBasis.kennwort}"
valueChangeListener="NULL" visibleOnUserRole="NULL">
<javax.faces.validator.LengthValidator/>
<javax.faces.validator.LengthValidator/>
<javax.faces.validator.LengthValidator/>
<javax.faces.validator.LengthValidator/>
<javax.faces.validator.LengthValidator/>
</html.ext.HtmlInputText>
How can I manage this? (The problem reminds me of my post send on Tuesday,
which might also be caused by multiple invocations of a validator, but that
validator was a built-in one: Please see
http://www.mail-archive.com/[email protected]/msg14355.html)
Regards,
Matthias