Maintenant que j'ai ma liste de stages correspondant à la discipline du concours de l'étudiant et dans lesquels il reste de la place, j'essaie de programmer l'inscription de l'étudiant au stage qu'il a choisi.

Comme déjà dit dans l'autre message, la table des stages thStageStg hérite de la table des sessions teSessionSsn qui est associée en many to many à la table des candidats thCandidatCnd.

Stage -(1,1)----Etre----0,1- Session -0,n----Inscrire----0,n- Candidat

Cette structure un peu complexe est due au fait que nous souhaitons généraliser cette opération d'inscription à quelque chose (un stage, un colloque, une conférence, un cours...) mais ce n'est pas l'objet de cette discussion.

J'ai un bouton "S'inscrire" sous le tableau et une case à cocher sur chaque ligne de la liste des stages.
Extraits de listeStages.xhtml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
                       <h:column>
                           <f:facet name="header">Choisir</f:facet>
                           <h:selectBooleanCheckbox id="choisir" 
                               value="#{listeStages.selection[stage.ssnId]}"/>
                       </h:column>
 
            <h:commandButton id="inscrire" 
                action="#{listeStages.inscrire}" 
                value="S'inscrire"/>
Et dans ListeStages.java qui génère la liste des stage par le code donné dans mes autres messages, j'ai une fonction inscrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    /**
     * Inscrit l'étudiant au stage choisi
     */
    public void inscrire()
    {
        try
        {
 
            log.info("ListeStages.inscrire {0} / inscription du candidat : #{user.prsId}");
 
            /*dataList = new ArrayList<ThStageStg>();
    
            // Récupère la sélection
            for (ThStageStg dataItem : dataList) 
            {
                if (selection.get(dataItem.getSsnId()).booleanValue())
                {
                    dataList.add(dataItem);
                    selection.remove(dataItem.getSsnId());
                    // Enregistre l'inscription*/
 
 
 
                    Query query = this.getEntityManager().createNativeQuery(
                            "INSERT INTO tj_cnd_inscrire_ssn_cis (cis_id_candidat, cis_id_session) " +
                            "VALUES (5, 3)"/*:idCandidat, :idSession) "*/
                            );
                    /*query.setParameter("idCandidat", this.user.getPrsId());
                    query.setParameter("idSession", dataItem.getSsnId());*/
 
                    query.executeUpdate();
                /*}
            }*/
 
        }
        catch (NoResultException ex)
        {
            log.info("ListeStages.inscrire {0} / Enregistrement inscription échouée");
 
 
        }
    }
Comme vous pouvez le constater, j'ai essayé une solution qui récupère l'item sélectionné et comme ça ne fonctionnait pas, j'ai essayé de simplifier au maximum pour injecter directement des valeurs valables dans la table associative tj_cnd_inscrire_ssn_cis.
Rien ne se passe !
Le log.info ne s'affiche même pas dans la console !

Par contre, j'y trouve ceci, quand je clique sur le bouton :
16:59:58,298 DEBUG [FacesLifecycle] >>> Begin JSF request for /stamas/listeStages.seam
16:59:58,428 DEBUG [Manager] No stored conversation
16:59:58,462 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,468 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,470 DEBUG [ManagedPersistenceContext] created seam managed persistence context from EntityManagerFactory
16:59:58,472 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,472 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,473 DEBUG [SeamPhaseListener] beginning transaction prior to phase: APPLY_REQUEST_VALUES 2
16:59:58,473 DEBUG [EntityTransaction] beginning JPA resource-local transaction
16:59:58,510 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,510 DEBUG [Component] trying to inject with hierarchical context search: user
Hibernate:
select
thstagestg0_.stg_id_session as ssn1_9_,
thstagestg0_1_.ssn_capacite as ssn2_9_,
thstagestg0_1_.ssn_code as ssn3_9_,
thstagestg0_1_.ssn_date_debut as ssn4_9_,
thstagestg0_1_.ssn_date_fin as ssn5_9_,
thstagestg0_1_.ssn_libelle as ssn6_9_,
thstagestg0_.stg_id_etablissement as stg2_14_,
thstagestg0_.stg_id_conseiller_pedago as stg3_14_
from
stamas.th_stage_stg thstagestg0_
inner join
stamas.te_session_ssn thstagestg0_1_
on thstagestg0_.stg_id_session=thstagestg0_1_.ssn_id
inner join
stamas.tj_stg_concerner_dsc_scd tediscipli1_
on thstagestg0_.stg_id_session=tediscipli1_.scd_id_stage
inner join
stamas.te_discipline_dsc tediscipli2_
on tediscipli1_.scd_id_discipline=tediscipli2_.dsc_id
inner join
stamas.te_concours_ccr teconcours3_
on tediscipli2_.dsc_id=teconcours3_.ccr_id_discipline
inner join
stamas.th_etudiant_etu thetudiant4_
on teconcours3_.ccr_id=thetudiant4_.etu_id_concours
inner join
stamas.th_candidat_cnd thetudiant4_1_
on thetudiant4_.etu_id_candidat=thetudiant4_1_.cnd_id_utilisateur
inner join
stamas.th_utilisateur_uti thetudiant4_2_
on thetudiant4_.etu_id_candidat=thetudiant4_2_.uti_id_personne
inner join
stamas.te_personne_prs thetudiant4_3_
on thetudiant4_.etu_id_candidat=thetudiant4_3_.prs_id
left outer join
stamas.tj_cnd_inscrire_ssn_cis thcandidat5_
on thstagestg0_.stg_id_session=thcandidat5_.cis_id_session
left outer join
stamas.th_candidat_cnd thcandidat6_
on thcandidat5_.cis_id_candidat=thcandidat6_.cnd_id_utilisateur
left outer join
stamas.th_utilisateur_uti thcandidat6_1_
on thcandidat6_.cnd_id_utilisateur=thcandidat6_1_.uti_id_personne
left outer join
stamas.te_personne_prs thcandidat6_2_
on thcandidat6_.cnd_id_utilisateur=thcandidat6_2_.prs_id
where
thetudiant4_2_.uti_login=?
group by
thstagestg0_.stg_id_session
having
count(thcandidat6_.cnd_id_utilisateur)<thstagestg0_1_.ssn_capacite limit ?
16:59:58,573 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,573 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,574 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,574 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,575 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,575 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,576 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,577 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,579 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,579 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,579 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,580 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,580 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,580 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,584 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,584 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,585 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,585 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,586 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,587 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,588 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,588 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,589 DEBUG [ResourceLoader] resource bundle missing: listeStages
16:59:58,590 DEBUG [ResourceLoader] resource bundle missing: listeStages
29 nov. 2010 16:59:58 javax.faces.component.UIInput updateModel
GRAVE: Une erreur est survenue lors du traitement de linformation que vous avez fournie
java.lang.NullPointerException
at com.sun.faces.el.FacesResourceBundleELResolver.setValue(FacesResourceBundleELResolver.java:136)
...
16:59:58,592 DEBUG [SeamPhaseListener] committing transaction after phase: UPDATE_MODEL_VALUES 4
16:59:58,592 DEBUG [EntityTransaction] committing JPA resource-local transaction
16:59:58,593 DEBUG [SeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
16:59:58,593 DEBUG [EntityTransaction] beginning JPA resource-local transaction
16:59:58,671 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,672 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,672 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,672 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,673 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,673 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,674 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,674 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,675 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,675 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,677 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,677 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,677 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,678 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,678 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,678 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,681 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,681 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,681 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,681 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,682 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,682 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,684 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,685 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,685 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,685 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,686 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,686 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,706 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,707 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,707 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,707 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,708 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,708 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,709 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,710 DEBUG [Component] trying to inject with hierarchical context search: user
Hibernate:
select
teetabliss0_.etb_id as etb1_3_0_,
teetabliss0_.etb_adresse as etb2_3_0_,
teetabliss0_.etb_code_postal as etb3_3_0_,
teetabliss0_.etb_nom as etb4_3_0_,
teetabliss0_.etb_telephone as etb5_3_0_,
teetabliss0_.etb_id_commune as etb6_3_0_,
teetabliss0_.etb_id_type_etablissement as etb7_3_0_
from
stamas.te_etablissement_etb teetabliss0_
where
teetabliss0_.etb_id=?
Hibernate:
select
trcommunec0_.cmn_id as cmn1_8_0_,
trcommunec0_.cmn_nom as cmn2_8_0_,
trcommunec0_.cmn_id_departement as cmn3_8_0_
from
stamas.tr_commune_cmn trcommunec0_
where
trcommunec0_.cmn_id=?
Hibernate:
select
trdepartem0_.dpt_id as dpt1_11_0_,
trdepartem0_.dpt_nom as dpt2_11_0_,
trdepartem0_.dpt_numero as dpt3_11_0_,
trdepartem0_.dpt_id_region as dpt4_11_0_
from
stamas.tr_departement_dpt trdepartem0_
where
trdepartem0_.dpt_id=?
16:59:58,718 DEBUG [DateConverter] Converting date '2011-05-22' to string for clientId 'listeStagesForm:listeStagesFiltree:0:j_id49' using Seam's built-in JSF date converter
16:59:58,718 DEBUG [DateConverter] Converting date '2011-06-10' to string for clientId 'listeStagesForm:listeStagesFiltree:0:j_id54' using Seam's built-in JSF date converter
16:59:58,719 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,719 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,719 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,720 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,722 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,754 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,754 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,755 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,755 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,755 DEBUG [Component] trying to inject with hierarchical context search: user
16:59:58,756 DEBUG [Component] trying to inject with hierarchical context search: statusMessages
16:59:58,756 DEBUG [Component] trying to inject with hierarchical context search: user
29 nov. 2010 16:59:58 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=listeStagesForm:listeStagesFiltree:0:choisir[severity=(ERROR 2), summary=(Une erreur est survenue lors du traitement de linformation que vous avez fournie), detail=(Une erreur est survenue lors du traitement de linformation que vous avez fournie)]
16:59:58,786 DEBUG [SeamPhaseListener] committing transaction after phase: RENDER_RESPONSE 6
16:59:58,787 DEBUG [EntityTransaction] committing JPA resource-local transaction
16:59:58,787 DEBUG [Manager] Discarding conversation state: 5
16:59:58,787 DEBUG [FacesLifecycle] After render response, destroying contexts
...
Je veux bien essayer d'enregistrer cette inscription par une méthode plus "javanaise", "hibernatienne" ou autre qu'en SQL natif mais je n'ai pas trouvé comment faire.
Les exemples que j'ai trouvés sont tous basé sur une entité de l'application mais la table associative n'a pas été mappée par Seam Generate Entities.