IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

c:choose / when / otherwise - ne fonctionne pas


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut c:choose / when / otherwise - ne fonctionne pas
    Bonjour,

    J'ai un cas qui parait tout simple, mai qui au final ne fonctionne pas .
    J'ai un bean qui contient 2 champs, un seul de ces 2 champs peut être renseigné dans le bean.

    Dans un tableau qui affiche ce bean, j'ai une colonne dans laquelle j'aimerais conditionner l'affichage de ces champs pour toujours afficher celui qui est renseigné :

    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
     
    <p:dataTable 	id="identites"
    	value="#{gestionIdentitesForm.listIdentites}" 
    	var="identite" widgetVar="identiteTable" filteredValue="#{gestionIdentitesForm.listIdentitesFiltered}"
    	emptyMessage="#{msg['AucuneIdentiteAAfficher']}" 
    	sortMode="multiple"
    	rowKey="#{identite.id}" paginator="true" paginatorPosition="bottom"  
    	rows="10" style="margin-bottom:10px" 
    	paginatorTemplate=" {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
    	rowsPerPageTemplate="10,30,50">
     
    ...
     
    <p:column headerText="#{msg['Localite']}" style="width:10%">
    		<!-- Test pour savoir s'il faut afficher la localité préenregistrée ou la localité libre -->
           		<c:choose>
           			<c:when test="${not empty identite.adressePrincipale.localite.nom}">#{identite.adressePrincipale.localite}</c:when>
           			<c:when test="${not empty identite.adressePrincipale.localiteLibre}">#{identite.adressePrincipale.codePostalLibre} #{identite.adressePrincipale.localiteLibre}</c:when>
    			<c:otherwise>#{msg[AucuneLocaliteRenseignee]}</c:otherwise>	
           		</c:choose>
    </p:column>
     
    ...
    </p:dataTable>
    Les champs du bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Localité préengistrée, en tant qu'objet
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Localite localite;
     
    // Code postal étranger, en saisie libre
    @Column(name = "CODE_POSTAL_LIBRE", length = 100)
    private String codePostalLibre;
     
    // Localité étrangère, en saisie libre
    @Column(name = "LOCALITE_LIBRE", length = 100)
    private String localiteLibre;
    Le problème est que rien n'est affiché dans la colonne, ni même "Aucune localité renseignée" qui correspond au cas otherwise.
    Qqun a-t-il une idée de ce qu'il me manque ?

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:when test="#{not empty identite.adressePrincipale.localite.nom}">
    PS : Pour ton autre problème, j'ai trouvé une autre solution
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    J'ai regardé 50 exemples mais j'ai pas été foutu de remarquer que c'était un # et pas un $
    Mais il doit y avoir encore un truc car ça ne marche pas encore. Ca affiche toujours rien

    Oui j'ai vu pour l'autre problème, c'est cool, merci :-)

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    ça devrait ressembler à ceci
    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
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:c="http://java.sun.com/jsp/jstl/core"
        xmlns:p="http://primefaces.org/ui">
         
        <h:body>
    
            <h:form id="form1">
    
            <c:choose>
                <c:when test="#{not empty testManager.statut.libelle}">
                    <h:outputText value="le libellé n'est pas vide"/>
                </c:when>
                
                <c:when test="#{testManager.statut.uid == 1}">
                    <h:outputText value="Option 1"/>
                </c:when>
    
                <c:when test="#{testManager.statut.uid == 2}">
                    <h:outputText value="Option 2"/>
                </c:when>
    
                <c:otherwise>
                    <h:outputText value="Ce n'est ni l'option 1, ni l'option 2"/>
                </c:otherwise>
            </c:choose>
            
            </h:form>
                    
        </h:body>
    </html>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Oui c'est bien ça :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <ui:composition template="../../secured/modele/template.xhtml"
    	xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:c="http://java.sun.com/jsp/jstl/core">
    	<ui:define name="contenu">
    		<h:form id="gestionIdentitesForm">
    			
    			<!-- <p:growl id="messages" life="2000" />  -->
    			
    			<!-- Dialogue de confirmation de suppression d'une identité -->
    			<p:dialog header="#{msg['ConfirmerLaSuppression']}" widgetVar="confDeleteDlg" resizable="false" id="confDelDlg"
                                showEffect="fade" hideEffect="fade" >
                	<p:outputLabel value="#{msg['EtesVousSurDeVouloirSupprimerCetteIdentite']}" />
                    <div align="center">
    	                <h:panelGrid id="display" columns="2" cellpadding="10">
    	                	<p:commandButton id="deleteButton" action="#{gestionIdentitesForm.supprimerIdentite}" oncomplete="PF('confDeleteDlg').hide()" 
    	                            update=":gestionIdentitesForm:identites, messages" value="#{msg['Oui']}" />
    	                	<p:commandButton id="cancelButton" onclick="PF('confDeleteDlg').hide()" value="#{msg['Non']}"/>
    	                </h:panelGrid>
                    </div>
                </p:dialog>
    			
    			<!-- Tableau d'affichage des identités -->
    			<h2>
    				<h:outputText value="#{msg['GestionDesIdentites']}" />
    			</h2>
    			
    			<p:dataTable 	id="identites"
    							value="#{gestionIdentitesForm.listIdentites}" 
    							var="identite" widgetVar="identiteTable" filteredValue="#{gestionIdentitesForm.listIdentitesFiltered}"
    							emptyMessage="#{msg['AucuneIdentiteAAfficher']}" 
    							sortMode="multiple"
    							rowKey="#{identite.id}" paginator="true" paginatorPosition="bottom"  
    							rows="10" style="margin-bottom:10px" 
    							paginatorTemplate=" {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
    							rowsPerPageTemplate="10,30,50">
    							
    				<f:facet name="header">
                		<p:outputPanel>
                			<div align="left">
                				<p:link outcome="saisirIdentite" value="# #{msg['AjouterUneIdentite']}" />
                    		</div>
                		</p:outputPanel>  
            		</f:facet>
    						
    				<p:column headerText="#{msg['ID']}" style="width:3%" rendered="#{gestionIdentitesForm.userSuperAdmin}" >
    	         		<h:outputText value="#{identite.id}" />
    	       		</p:column>
    	       		
    	       		<p:column filterBy="#{identite.typeIdentiteCi}" filterMatchMode="exact" headerText="#{msg['Type']}" style="width:8%">
    	       			<f:facet name="filter">
                   	 		<p:selectOneMenu onchange="PF('identites').filter()" >
                        		<f:selectItem itemLabel="#{msg['Type']}" itemValue="#{null}" noSelectionOption="true" />
                        		<f:selectItems value="#{gestionIdentitesForm.listTypeIdentite}" />
                    		</p:selectOneMenu>
                		</f:facet>
    
    					<h:outputText value = "#{identite.typeIdentiteCi.abrege}" />
    	        	</p:column>
    	       		
    				<p:column sortBy="#{identite.nom}" headerText="#{msg['Nom']}" style="width:10%" filterBy="#{identite.nom}" filterMatchMode="contains" >
    	          		 <h:outputText value="#{identite.nom}" />
    	        	</p:column>
    				
    				<p:column filterBy="identite.prenom" filterMatchMode="contains" sortBy="#{identite.prenom}" headerText="#{msg['Prenom']}" style="width:10%">
    	          		#{identite.prenom}
    	        	</p:column>
    	        	
    	        	<p:column filterBy="identite.raisonSociale" filterMatchMode="contains" sortBy="#{identite.raisonSociale}" headerText="#{msg['RaisonSociale']}" style="width:20%">
    	          		#{identite.raisonSociale}
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['Rue']}" style="width:15%">
    	          		#{identite.adressePrincipale.rueNumero}
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['Localite']}" style="width:10%">
    	          		<!-- Test pour savoir s'il faut afficher la localité suisse ou la localité libre -->
    	          		<c:choose>
    	          			<c:when test="#{not empty identite.adressePrincipale.localite.nom}">
    	          				#{identite.adressePrincipale.localite}
    	          			</c:when>
    	          			<c:when test="#{not empty identite.adressePrincipale.localiteLibre}">
    	          				#{identite.adressePrincipale.codePostalLibre} #{identite.adressePrincipale.localiteLibre}
    	          			</c:when>
    						<c:otherwise>
    							#{msg[AucuneLocaliteRenseignee]}
    						</c:otherwise>	
    	          		</c:choose>
    	        	</p:column>	        	
    	        	<p:column headerText="#{msg['NoTelProf']}" style="width:8%">
    	          		#{identite.adressePrincipale.noTelProf}
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['NoTelMobile']}" style="width:8%">
    	          		#{identite.adressePrincipale.noTelMobile}
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['NoTelPrive']}" style="width:8%">
    	          		#{identite.adressePrincipale.noTelPrive}
    	        	</p:column>
    	        	
    	        	<p:column headerText="#{msg['Email']}" style="width:15%">
    	          		#{identite.adressePrincipale.email}
    	        	</p:column>
     	        	
    	        	<p:column headerText="#{msg['Actions']}" style="width:7%">
    	          		<p:link value="# #{msg['Modifier']}" outcome="saisirIdentite" >
                 			<f:param name="idIdentite" value="#{identite.id}" />
             	 		</p:link>
    					/
             	 		<p:commandLink value="# #{msg['Supprimer']}" onclick="PF('confDeleteDlg').show()" >
             	 			<f:setPropertyActionListener target="#{gestionIdentitesForm.selectedIdentite}" value="#{identite}"/>
             	 		</p:commandLink>
    	        	</p:column> 
    			</p:dataTable>
    			
    		 	<p:messages id="messages" autoUpdate="true" globalOnly="true" />
     		</h:form>
    	</ui:define>
    </ui:composition>
    Peut-être que ça vient du bean ?
    Identite :
    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
     
    @OneToMany(mappedBy = "identite", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Adresse> adresses;
     
    public Adresse getAdressePrincipale() {
    		if (adresses != null && !adresses.isEmpty()) {
    			for (Adresse adresse : adresses) {
    				if (TypeAdresseCi.PRINCIPALE.equals(adresse.getTypeAdresse())) {
    					return adresse;
    				}
    			}
    		}
     
    		return null;
    }
    Ou Adresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Localité pré-enregistrée, en tant qu'objet
    	@ManyToOne(cascade = CascadeType.MERGE)
    	@JoinColumn(name = "AD_LOCALITE_ID")
    	private Localite localite;

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je dirais que ça ne vient pas de l'entity mais que c'est peut-être lié à ton paramétrage et à ta requête.
    Comme tu as positionné le chargement à Lazy, il se pourrait que la propriété n'est pas été chargée.
    Ça se traduirait par une erreur franche avec du code java mais via les EL, ça peut passer inaperçu.

    Quand tu veux utiliser des sous-attributs en Lazy loading dans une page, tu as (en gros) 2 possibilités :

    - garder l'entity "attaché" pendant tout le traitement (jusqu'à la fin de la réponse)
    - charger les données dont tu auras besoin dans la vue par la requête à l'aide de l'instruction "join fetch" ou "left join fetch"

    Quelle techno utilises-tu ? EJB ou DAO classique ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trigger When-Button-Pressed ne fonctionne pas
    Par saviola_lafayette dans le forum Forms
    Réponses: 1
    Dernier message: 18/01/2014, 20h31
  2. Trigger When-Button-Pressed ne fonctionne pas
    Par Finol dans le forum Forms
    Réponses: 5
    Dernier message: 20/12/2012, 15h18
  3. [XSL] Choose when otherwise
    Par sacha69 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/03/2009, 14h25
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo