Bonjour,
Je travaille avec Jboss 4.2.3, Seam 2.1.1 et jsf 1.2 et richfaces 3.2.1
J'ai un formulaire de saisie avec des comboBox. Quand je sélectionne une valeur dans un, ça doit réduire le champ des valeurs des suivants.
Pour ça, dans la page j'utilise :Les valeurs de ma combobox sont données par un service qui génère les listes de SelectItem depuis les listes d'entités que je souhaiterais garder en cache, pour pouvoir faire les liens id/entité sans passer par ma base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a4j:support event="onchange" reRender="maComboBox" />
Mon idée, pour réaliser cette sorte de cache des listes d'entités, était de faire de ce service une conversation : une par utilisateur, qui dure jusqu'à ce qu'on fasse un submit.
J'ai rajouté le transactionAttribute pour le lazy loading.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Name("selectItemGenerator") @Stateful @Scope(ScopeType.CONVERSATION) @TransactionAttribute public class SelectItemGeneratorBO implements SelectItemGeneratorBS
j'ai une fonction begin
et une fonction end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Begin public void init() {
et j'ai lu dans la doc de seam (mais j'ai peut être mal compris) que pour s'assurer que la conversation commence à l'affichage de la page, il fallait ajouter dans pages.xml ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @End @Remove public void finish() {
Mon problème, c'est qu'à l'affichage de la page, tout va bien, mais quand je sélectionne une valeur qui va appeller le reRender d'un élément, j'ai ce message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <page view-id="mapage.xhtml" action="#{selectItemGenerator.init()}"/>
Selon moi, rajouter un (join=true) ne résoudras pas le problème puisqu'il y aura très probablement des conflits au niveau des sessions hibernate, et donc j'aimerais savoir :javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: begin method invoked from a long-running conversation, try using @Begin(join=true) on method: init
1) est ce que mon idée de conversation est bonne ou je me suis totalement planté ?
2) si oui, qu'est ce que j'ai fait de mal ? (probablement le pages.xml, qui me semble louche)
3) Quand est ce que je suis sensé appeller le begin et le end en réalité ?
D'avance, merci beaucoup.
Partager