bonjour, j'ai un soucis avec validateLongRange.
J'ai ce code:
1 2 3 4
| <h:inputText value="#{job.jobDatas[parameter.key]}" rendered="#{parameter.type.name eq 'INTEGER'}">
<f:validateLongRange minimum="#{parameter.min}" maximum="#{parameter.max}"/>
</h:inputText>
<h:outputText value="min is #{parameter.min} and max is #{parameter.max}" rendered="#{parameter.type.name eq 'INTEGER'}"/> |
min et max sont des getters sur des propriétés de type int. Il n'y a pas de setter associé. min, max et type sont initialisés dans le constructeur de parameter, les champs sont finaux donc non modifiables par le code. Seule particularité, "parameter" proviens de l'itération d'une datatable.
<h:dataTable value="#{job.template.parameters}" var="parameter" id="datas">
Voilà pour le contexte. Si j'entre un nombre (exemple 3) dans le champ. J'ai le message d'erreur "Validation Error: Specified attribute is not between the expected values of 0 and 0." alors que l'outputtext à coté affiche
"min is 0 and max is 5"
Si je modifie le code comme ceci:
1 2 3 4
| <h:inputText value="#{job.jobDatas[parameter.key]}" rendered="#{parameter.type.name eq 'INTEGER'}">
<f:validateLongRange minimum="#{parameter.min}" maximum="#{(parameter.max+1)+1}"/>
</h:inputText>
<h:outputText value="min is #{parameter.min} and max is #{parameter.max} (#{(parameter.max+1)+1})" rendered="#{parameter.type.name eq 'INTEGER'}"/> |
j'obtiens "Validation Error: Specified attribute is not between the expected values of 0 and 2." et "min is 0 and max is 5 (7)"
Est-il possible que validatelongrange (je n'ai pas trouvé son code source) fasse l'évaluation de l'EL en dehors de la boucle (exemple à la création du tag) et donc que les EL dans validatelongrange ne peuvent pas pointer, paradoxalement, sur des Expressions qui changent de valeur? Sinon, comment expliquer ce phénomène?
Partager