So I just did the following experiment in my project. in the testCheckinDate1 component below, both events are being fired as evidenced by the alerts.
facelet:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:form>
<rich:calendar id="testCheckinDate1"
value="#{merchantBillingGroupEditorUI.myCalendar}"
validator="effectiveDateValidator"
required="false"
datePattern="MM/dd/yyyy"
enableManualInput="true"
onchanged="alert('testCheckinDate1: onchanged fired!');"
oninputchange="alert('testCheckinDate1: oninputchange fired!');">
</rich:calendar>
<rich:calendar id="testCheckinDate2"
value="#{merchantBillingGroupEditorUI.myCalendar}"
validator="effectiveDateValidator"
required="false"
datePattern="MM/dd/yyyy"
enableManualInput="true">
<a4j:support event="onchanged"
reRender="#{testCheckinDate2}"
requestDelay="0"
eventsQueue="select"
ignoreDupResponses="true"/>
<a4j:support event="oninputchange"
reRender="#{testCheckinDate2}"
requestDelay="0"
eventsQueue="select"
ignoreDupResponses="true"/>
</rich:calendar>
</h:form>
<a4j:log popup="false"/>
</ui:composition>
backing bean:
@Name("merchantBillingGroupEditorUI")
@Scope(ScopeType.CONVERSATION)
@MeasureCalls
@Stateful
public class MerchantBillingGroupEditorUIBean implements
MerchantBillingGroupEditorUI {
public void setMyCalendar(Date date) {
Date myCalendar = date;
}
public Date getMyCalendar() {
return new Date();
}
...
}
The setter and getter methods above are being executed. The validate() method is not.
a4j log output:
debug[12:16:59,561]: Have Event [object Object] with properties: target: undefined, srcElement: [object], type: click
debug[12:16:59,561]: Query preparation for form 'j_id0' requested
debug[12:16:59,561]: Append hidden control j_id0 with value [j_id0] and value attribute [j_id0]
debug[12:16:59,561]: Append text control j_id0:testCheckinDate1InputDate with value [01/19/2010] and value attribute [01/19/2010]
debug[12:16:59,561]: Append hidden control j_id0:testCheckinDate1InputCurrentDate with value [01/2010] and value attribute [01/2010]
debug[12:16:59,561]: Append text control j_id0:testCheckinDate2InputDate with value [01/20/2010] and value attribute [01/20/2010]
debug[12:16:59,561]: Append hidden control j_id0:testCheckinDate2InputCurrentDate with value [01/2010] and value attribute [01/2010]
debug[12:16:59,561]: Append hidden control javax.faces.ViewState with value [j_id7] and value attribute [j_id7]
debug[12:16:59,561]: parameter j_id0:j_id1 with value j_id0:j_id1
debug[12:16:59,561]: Look up queue with name 'select'
debug[12:16:59,561]: Creating new transient queue 'select' with default settings
debug[12:16:59,561]: Adding queue 'select' to queues registry
debug[12:16:59,561]: Queue is empty now
debug[12:16:59,561]: New request added to queue 'select'. Queue similarityGroupingId changed to j_id0:j_id1
debug[12:16:59,561]: Queue will wait 0ms before submit
debug[12:16:59,561]: Queue 'select' will submit request NOW
debug[12:16:59,561]: NEW AJAX REQUEST !!! with form: j_id0
debug[12:16:59,561]: Start XmlHttpRequest
debug[12:16:59,561]: Reqest state : 1
debug[12:16:59,561]: QueryString: AJAXREQUEST=_viewRoot&j_id0=j_id0&j_id0%3AtestCheckinDate1InputDate=01%2F19%2F2010&j_id0%3AtestCheckinDate1InputCurrentDate=01%2F2010&j_id0%3AtestCheckinDate2InputDate=01%2F20%2F2010&j_id0%3AtestCheckinDate2InputCurrentDate=01%2F2010&javax.faces.ViewState=j_id7&j_id0%3Aj_id1=j_id0%3Aj_id1&AJAX%3AEVENTS_COUNT=1&
debug[12:17:24,373]: Reqest state : 2
debug[12:17:24,373]: Reqest state : 3
debug[12:17:24,373]: Reqest state : 4
debug[12:17:24,373]: Reqest end with state 4
debug[12:17:24,373]: Response with content-type: text/xml;charset=UTF-8
debug[12:17:24,373]: Full response content: <?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"><head><link class="component" href="/cis/a4j/s/3_3_1.GAorg/richfaces/renderkit/html/css/basic_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__" rel="stylesheet" type="text/css" /><link class="component" href="/cis/a4j/s/3_3_1.GAorg/richfaces/renderkit/html/css/extended_classes.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__" media="rich-extended-skinning" rel="stylesheet" type="text/css" /><script src="/cis/a4j/g/3_3_1.GAorg.ajax4jsf.javascript.PrototypeScript" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg.ajax4jsf.javascript.AjaxScript" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/events.js" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/utils.js" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/json/json-dom.js" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/scriptaculous/effects.js" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/jquery/jquery.js" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/JQuerySpinBtn.js" type="text/javascript">
</script><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/calendar.js" type="text/javascript">
</script><link class="component" href="/cis/a4j/s/3_3_1.GAorg/richfaces/renderkit/html/css/calendar.xcss/DATB/eAF7sqpgb-jyGdIAFrMEaw__" rel="stylesheet" type="text/css" /><script src="/cis/a4j/g/3_3_1.GAorg/richfaces/renderkit/html/scripts/skinning.js" type="text/javascript">
</script><meta name="Ajax-Update-Ids" content="" /><title></title></head><body><span id="ajax-view-state"><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id7" /></span><meta id="Ajax-Response" name="Ajax-Response" content="true" /></body></html>
debug[12:17:24,373]: Header Ajax-Expired not found, search in <meta>
debug[12:17:24,373]: search for elements by name 'meta' in element #document
debug[12:17:24,373]: Find <meta name='Ajax-Update-Ids' content=''>
debug[12:17:24,373]: Find <meta name='Ajax-Response' content='true'>
debug[12:17:24,373]: Header Ajax-Update-Ids not found, search in <meta>
debug[12:17:24,373]: search for elements by name 'meta' in element #document
debug[12:17:24,373]: Find <meta name='Ajax-Update-Ids' content=''>
warn[12:17:24,388]: No information in response about elements to replace
debug[12:17:24,388]: call selectSingleNode for id= org.ajax4jsf.oncomplete
debug[12:17:24,388]: Processing updates finished, no oncomplete function to call
debug[12:17:24,388]: After request: queue 'select'
debug[12:17:24,388]: There are 0 requests more in this queue
debug[12:17:24,388]: Queue is empty now
debug[12:17:24,388]: call selectSingleNode for id= ajax-view-state
debug[12:17:24,388]: Hidden JSF state fields:
debug[12:17:24,388]: Namespace for hidden view-state input fields is undefined
debug[12:17:24,388]: search for elements by name 'input' in element span
debug[12:17:24,388]: Replace value for inputs: 6 by new values: 1
debug[12:17:24,388]: Input in response: javax.faces.ViewState
debug[12:17:24,388]: Found same input on page with type: hidden
debug[12:17:24,388]: search for elements by name 'INPUT' in element span
debug[12:17:24,388]: Replace value for inputs: 6 by new values: 0
debug[12:17:24,388]: call selectSingleNode for id= _A4J.AJAX.focus
debug[12:17:24,388]: No focus information in response