Bonjour tout le monde.

J'ai actuellement un fichier xhtml qui contient ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
<s:decorate id="typeAvenant" template="../layout/edit.xhtml">
            <ui:define name="selectOneMenu">
              <h:selectOneMenu id="listTypeAvenant" value="#{ecr_cta_a_1.monTypeAvenant}"
                converter="#{ecr_cta_a_1.avenantConverter}" styleClass="selectPolice">
                <f:selectItem itemLabel="" />
                <f:selectItems value="#{ecr_cta_a_1.avenantConverter.activeContent}" />
                <a4j:support event="onchange"
                  reRender="libelleDateEffetPanel,dateEffetPanel,libelleImmatriculationPanel,immatriculationPanel"></a4j:support>
              </h:selectOneMenu>
            </ui:define>
          </s:decorate>
 
(...)
 
<a4j:outputPanel id="dateEffetPanel" style="unQuart">
            <h:panelGroup >
              <s:decorate id="dateDebutEffet" template="../layout/edit.xhtml" styleClass="unQuart">
                <ui:define name="calendar">
                  <rich:calendar id="dateEffet" value="#{ecr_cta_a_1.dateEffet}" enableManualInput="true"
                    datePattern="#{messages['commons_datePattern']}" oninputkeyup="addSlashes()" rendered="#{ecr_cta_a_1.afficheDateEffet}">
                  </rich:calendar>
                </ui:define>
              </s:decorate>
            </h:panelGroup>
          </a4j:outputPanel>
Ainsi, typeAvenant définit l'apparition de dateEffet. Lorsque j'entre des données dans dateEffet, le js addSlashes() est appelé à partir d'un fichier global.js et affirme que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function addSlashes(e){ 
	var length = this.value.length;
	var keyId = (window.event) ? event.keyCode : e.keyCode;
	if(keyId !=8)//Backspace
	{
		if(2 == length || 5 == length) {
	    	this.value=this.value+"/";
 
	    } else if (length > 6) {
            // ajouter le siècle si la fin de la valeur est
            // / suivi de 2 chiffres suivi d'un nombre de blancs 
            var re = /\/\d{2}(\s)*$/;
            var result = re.exec(this.value);
 
            if (result != null) {
              this.value = this.value.substr(0,result.index+1) + "20" + this.value.substr(result.index+1,2);
            }
 
  	        if (length > 10) {
	    	   this.value = this.value.substring(0,10);
	        }
        }
    } 
}
Or, lorsque je sélectionne la bonne valeur qui va bien dans typeAvenant, de manière à afficher dateEffet,j'obtient un vilain
Code : Sélectionner tout - Visualiser dans une fenêtre à part
'this.value.length' a la valeur null ou n'est pas un objet
mais si je fait un refresh (F5) de ma page, le js fonctionne alors parfaitement.

J'avoue que ça me plonge dans des abimes de perplexité. Quelqu'un aurait-il
a) une explication à mais qu'est ce qui se passe donc
b) une solution à me proposer (sachant que je ne peux pas me permettre de déplacer le code contenu dans global.js)

Merci d'avance.