Bonjour tout le monde.
J'ai actuellement un fichier xhtml qui contient ceci:
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
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
'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.
Partager