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 :

Utiliser EL avec Java


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Par défaut Utiliser EL avec Java
    Bonjour,

    1) --------------
    pour être bref j'aimerais pouvoir faire qqc de ce genre dans ma page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // client étant un managed bean
    <% if(#{client.connected == 1)){ %>
                  // J'affiche des informations
    <% } else { %>
                  // J'en affiche d'autres
    <% } %>
    Donc mélanger EL et Java finallement

    2) --------------
    Ainsi que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <%
    // getAllClients est une méthode statique de la classe ManagerClient
    Client[] clients = ManagerClient.getAllClients();
     
    for(int i = 0; i < client.length; i++){
                Client c = clients[i];
    %>
                <h:outputLink value="traitement.jsp?id=#{c.id}">Fiche de #{c.nom}</h:outputLink>
    %>
    Je sais que ca ne marche pas du tout comme ca, mais c'est juste pour vous montrer ce que j'aimerais faire. Une sorte de conversion entre objet java et un bean sous forme #{}.

    Si vous pouvez m'aiguiller ca serait bien sympa
    Merci

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bon, alors ça, c'est très crado, c'est du JSP pabô.

    En JSF, on peut faire tout ce que l'on veut sans mettre du code Java directement dans ses pages...

    Premier cas, le plus simple serait de faire :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <h:panelGroup block="layout" rendered="#{client.connected eq 1}">
        ... des trucs
    </h:panelGroup>
    <h:panelGroup block="layout" rendered="#{not client.connected eq 1}">
        ... d'autres trucs
    </h:panelGroup>

    Là, j'ai utilisé le composant <h:panelGroup> pour englober mes contenus, mais rien n'empêche d'utiliser un autre type de composant...

    Il y a aussi des composants JSTL pour faire du <c:if>, mais je trouve ça généralement beaucoup trop verbeux...

    Pour ton 2e cas, il suffit d'utiliser un composant d'itérations. Par exemple <ui:repeat>, <a4j:repeat>, etc. :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ui:repeat value="#{monBean.allClients}" var="unClient">
        <h:outputLink value="traitement.jsp?id=#{unClient.id}"/>
    </ui:repeat>
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Par défaut
    Merci beaucoup, je comprend mieux la logique de la chose.

    Juste dans panelGroup "not ... eq" marche pas chez moi, j'ai mis "ne" qui fait la même chose. Aussi block="layout" n'est pas reconnu du coup j'ai mis style="display:block;"


    Pour le deuxième point, bien que j'ai compris comment ca marche, j'obtiens une erreur :

    .jsp
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     <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"> 
     
     
      <head><title>Inscription</title></head>
      <body>
         <f:view>
         	<h3>Liste des annonces</h3>
    		<h:panelGrid border="0" columns="1">		
    	        	<ui:repeat value="#{annonceManager.listAnnonces}" var="annonce">
        				<h:outputText value="#{annonce.titre}"/>
    				</ui:repeat>			
    		</h:panelGrid>
         </f:view>
     </body>
    </html>
    Class AnnonceManager
    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
     
    public class AnnonceManager {
    	ArrayList<Annonce> listAnnonces;
     
    	public ArrayList<Annonce> getListAnnonces() {
    		listAnnonces.clear();
    		Annonce[] all = getAllAnnonces();
    		for(int i = 0; i < all.length; i++){
    			listAnnonces.add(all[i]);
    		}		
    		return listAnnonces;
    	}
     
    	public static Annonce[] getAllAnnonces(){
                          // Intérogation d'un fichier XML ... sans interet pour le problème
    		synchronized(XmlDatabase.mSyncObject){
    			ArrayList<Annonce> list = new ArrayList<Annonce>();
     
    			Element root = XmlDatabase.mAnnonces.getDocumentElement();
     
    			NodeList nodes = root.getElementsByTagName("annonce");
    	        for(int i=0; i<nodes.getLength(); i++){
    	        	Element e = (Element)nodes.item(i);
     
    	    		Annonce a = new Annonce();
    	    		a = selectAnnonce(e.getAttribute("id"));
     
    	    		list.add(a);
    	        }
     
    	        Annonce[] tab = new Annonce[list.size()];
    	        list.toArray(tab);
    	        Arrays.sort(tab);
    			return tab;
    		}
    	}
    }
    Class Annonce
    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
     
    public class Annonce {
     
    	private String id;
    	private String titre;
    	private String description;
    	private String prix;
    	private String email;
    	private String type;
     
    	public String getTitre() {
    		return titre;
    	}
     
    	public void setTitre(String titre) {
    		this.titre = titre;
    	}
     
               // Autres getters & setters
    }
    Faces config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	<managed-bean>
    	  <managed-bean-name>annonce</managed-bean-name>
    	  <managed-bean-class>model.Annonce</managed-bean-class>
    	  <managed-bean-scope>request</managed-bean-scope>
    	</managed-bean>
     
    	<managed-bean>
    	  <managed-bean-name>annonceManager</managed-bean-name>
    	  <managed-bean-class>database.AnnonceManager</managed-bean-class>
    	  <managed-bean-scope>request</managed-bean-scope>
    	</managed-bean>
    Et enfin l'erreur que j'obtiens :
    La ligne 17 étant : <ui:repeat value="#{annonceManager.listAnnonces}" var="annonce">
    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
    org.apache.jasper.JasperException: /announcement.jsp (line: 17, column: 30) #{...} is not allowed in template text
    	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
    	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:102)
    	org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:728)
    	org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:954)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
    	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
    	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
    	org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
    	org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1789)
    	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:216)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:339)
    	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:344)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:542)
    	com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:359)
    	com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:150)
    	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:96)
    	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
    Des idées ?

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Citation Envoyé par keyga Voir le message
    Aussi block="layout" n'est pas reconnu du coup j'ai mis style="display:block;"
    Ce n'est pas la même chose. Ce que tu fais, c'est de définir le CSS d'un SPAN. Mon code définit un DIV et non un SPAN. Mais si ça ne marche pas, c'est juste parce que j'ai inversé attribut et valeur C'est layout="block" qu'il faut mettre.

    Citation Envoyé par keyga Voir le message
    Pour le deuxième point, bien que j'ai compris comment ca marche, j'obtiens une erreur :
    Pas sûr de bien comprendre où se situe l'erreur, mais essaie :

    1. de faire retourner un List<Annonce> et non ArrayList<Annonce> (même si ça ne résoud pas le pb, c'est plus propre de retourner une interface qu'une implémentation).
    2. Supprime annonce de tes déclarations de beans dans ton faces-config.xml. Ce n'est pas un managedBean, juste un bean.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Par défaut
    Merci pour les précisions,
    concernant mon deuxième problème, il venait de bien plus loin dans mes classes java... en gros la liste devait mal se créer...


  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    alors ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

Discussions similaires

  1. Comment utiliser MySql avec Java/Eclipse
    Par Titounet007 dans le forum JDBC
    Réponses: 5
    Dernier message: 28/11/2009, 13h59
  2. Problème utilisation OrdImage avec java et servlet
    Par Shouill dans le forum Oracle
    Réponses: 1
    Dernier message: 23/03/2007, 16h23
  3. Utilisation DLL avec java et licence ?
    Par dinver dans le forum Général Java
    Réponses: 4
    Dernier message: 13/04/2006, 21h23
  4. [API] Utiliser Samba avec Java
    Par Begood dans le forum Général Java
    Réponses: 1
    Dernier message: 13/03/2006, 19h26
  5. utiliser DocBook avec Java et générer du HTML
    Par hélia dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/03/2006, 17h09

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