Bonjour,
suite à mon post JSF validator, null problem, second round (http://www.developpez.net/forums/d95...d/#post5360842)
Je suis partie sur 2 solutions différentes. Aucune ne fonctionne alors j'ai préféré continuer avec la solution du Bean dans l'autre post et ouvrir celui-là pour la solution tomahawk. Si non c'est le bordel...

Description du problème:
J'ai un formulaire JSF. Avec un bean avec le scope request. Cela obligatoire car mon formulaire peut être chargé plusieurs fois dans la même session mais avec des valeurs différentes.
Mais j'ai certains validators sur des inputText. Quand on clique sur mon bouton save et que un validator donne une erreur, le formulaire est rechargé, mais certaines valeurs restent vides!

Pour l'output et le champs en lecture seule, ce mécanisme n'existe pas, puisque les valeur soumises sont par définition ignorées. Donc, dans ce cas là, le composant va bien relire dans le bean (alors que tous les autres composants sont réaffichés depuis les valeurs interne du composant). Conclusion qui me sembele évidente: si ton output ne s'affiche plus après erreur de validation, c'est que le bean sur lequel tu va chercher l'info ne l'a plus. Probablement parce qu'il a été réinitialisé entre les deux requêtes (bean request scope).
On m'a donc conseillé d'utiliser le savestate de tomahawk, mais je n'y arrive pas...

J'ai téléchargé la librairie (tomahawk-1.1.9.jar) que j'ai copié dans "web-inf/lib" de mon projet.

Dans ma page .jsp je l'ai déclarée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<%@ taglib 
	uri="http://myfaces.apache.org/tomahawk" 
	prefix="t"%>
J'ai utilisé le tag de cette façon (et d'autres encore, mais sans résultat):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<body>
<t:saveState id="state1" value="#{tForm.viewST}"/>
 
<f:view>
......
	<h:outputText
		value="#{tForm.viewST}"
		converter="xmlToHtmlConverter"
		escape="false" />
.....
J'ai aussi essayé de sauvegarder tout mon bean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<t:saveState id="saveTForm" value="#{tForm}"/>

Mon bean dans faces-config.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<managed-bean>
        <managed-bean-name>tForm</managed-bean-name>
        <managed-bean-class>com.tx.ss.bean.TForm</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
J'ai ajouté à ma classe l'implements java.io.Serializable:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
public class TForm extends test implements java.io.Serializable{
...

Mes valeurs sont toujours nulles au deuxième appelle de ma page...
Est-ce qu'il y a d'autres modifications à faire dans mon code, ou cela est suffisant?
Le saveState fait comment pour savoir quand il doit rendre la valeur? Et quand il doit l'effacer??