2010-03-23 4 views
1

Et ma confusion avec JSF continue. Ceci est la suite d'un question asked yesterday, mais je pense qu'il mérite une nouvelle question. J'ai un seul composant seam qui s'attend à ce qu'un paramètre d'URL soit injecté pour récupérer un List<String> à partir d'une méthode. Cela fonctionne parfaitement sur la première navigation sur la page. Le List est utilisé pour afficher beaucoup de différents groupes selectOneRadio qui peuplent un <h:form/>.JSF/Seam - nouvelle instance de composant sur submit?

Maintenant sur le soumettre, je ne peux pas obtenir le paramètre d'URL pour être injecté ou autrement mis sur le composant! L'ajout de <h:inputHidden/> provoque le lancement de FacesExceptions.

Puis j'ai essayé de définir le List comme une variable d'instance sur l'objet, et quand l'appel suivant est fait sur le submit (que je ne comprends pas aussi pourquoi c'est fait) je vérifie pour voir si la variable est non null: si ce n'est pas le cas, retournez-le.

Maintenant, j'ai trouvé qu'une nouvelle instance du composant est créée sur soumettre !!!

getList() called 
this.toString(): [email protected] 

#### This is when submit is clicked 
getList() called 
this.toString(): [email protected] 

Le composant a les annotations suivantes:

Stateful 
@Scope(ScopeType.CONVERSATION) 
@Name("bean") 
@Restrict("#{identity.loggedIn}") 

Quelqu'un peut-il expliquer pourquoi il y a une nouvelle instance du composant créé? Je ne sais vraiment pas comment gérer ça. Je pensais que le paramètre caché fonctionnerait, parce que c'est comme ça que je le ferais avec du HTML, et je suis un peu surpris que ça ne marche pas pour JSF/Seam.

Répondre

2

J'ai trouvé la solution, mais je ne comprends toujours pas pourquoi c'est nécessaire. En ajoutant <S:conversationId/> à la balise <h:commandButton/> je reçois maintenant la conversationId propagé à travers le formulaire de soumission.

Toutefois, les États documents de couture:

If you don't do anything special, a non-faces request (a GET request for example) 
will not propagate the conversation context and will be processed in a new 
temporary conversation. 

Ce qui signifie Seam/JSF soignait ma forme soumettre une "demande non faces". Pourquoi donc?

0

Lorsque vous entrez dans la page (ou après l'envoi), voyez-vous un identifiant de conversation dans l'URL? Je suis préoccupé par le fait que la conversation Seam n'est peut-être pas initialisée correctement.

+0

La méthode 'getList()' est marquée avec '@ Begin', et je peux actualiser la page qui affiche mon formulaire un certain nombre de fois et le même bean backing est utilisé. Lorsque je clique sur submit, je suis redirigé vers ma page 'summary.xhtml', et il y a un nouveau paramètre d'URL' cid'. Comment maintenir la conversation sur un envoi? – purecharger

+0

J'ai essayé Et je encore obtenir un nouvel identifiant de conversation lorsque je clique sur soumettre – purecharger

Questions connexes