2009-06-24 5 views
1

Y a-t-il un comportement défini dans JSF, si deux champs d'entrée sont liés à la même propriété tronquée de la session Backing Bean.Quel est le comportement JSF si vous liez la même propriété bean de sauvegarde à deux champs de saisie dans le même formulaire?

Voici mon extrait de code

<h:form id="myForm"> 
    <h:inputText id="field1" value="#{TheBackingBean.theProperty}" /> 
    <h:inputText id="field2" value="#{TheBackingBean.theProperty}" /> 

    <h:commandButton id="continueButton" action="#{TheBackingBean.doSomething}" /> 
</h:form> 

Ma question: Si champ1 et champ2 reçoivent des valeurs différentes, ce qui sera lié au support propriété de haricots? Est-ce même autorisé?

Je sais que c'est un scénario brut. Ma motivation est que nous avons des tests htmlunit en cours d'exécution pour notre application. Dans notre application JSF, nous voulons utiliser un composant personnalisé ajaxified cool. Cela ne fonctionne pas très bien avec htmlunit. Donc, mon idée était, je viens de mettre dans un champ caché qui se lie à la même propriété. Le test unitaire remplit alors le champ caché au lieu du "vrai".

Cordialement

Répondre

3

Je pense que ce genre de code est autorisé, mais je ne suis pas sûr de la valeur de theProperty après la présentation. Ce que je pense est que JSF procédez comme suit:

TheBackingBean.setTheProperty(field1.value); 
TheBackingBean.setTheProperty(field2.value); 

Cependant, rien - pour autant que je sache - spécifie l'ordre des appels setter. Ainsi, après la mise à jour des valeurs la phase JSF, vous ne serez pas sûr si theProperty sera égale à field1.value ou field2.value. En ce qui concerne votre scénario, vous indiquez que vous souhaitez lier la même propriété à un texte en entrée et un texte caché. Comme le hiddenText ne soumettra pas sa valeur, contrairement à inputText, ce problème ne se produira pas. En effet, si vous avez ce genre de code JSF:

<h:inputText id="field1" value="#{TheBackingBean.theProperty}"/> 
<h:inputHidden id="field2" value="#{TheBackingBean.theProperty}"/> 

alors JSF ne le fera:

TheBackingBean.setTheProperty(field1.value); 

pendant la phase de soumission.

Questions connexes