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 :

comment on fait appel aux méthodes métiers en utilisant Visual Web JSF


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut comment on fait appel aux méthodes métiers en utilisant JSF
    Salut,
    je cherche des tutoriels (ou lien)concerant l'utilisation du framework "visual wed JSF", et l'appel aux méthodes métier, en effet, à partir de mes recherches, j'ai trouvé sauf les cas classiques et simples qui font appel à la BD sans utiliser les EJB, et je ne sais pas comment faire pour appeler les méthodes de la couche métiers?
    merci d'avance

    de plus, je vous demande un conseil, c'est mieux d'utiliser JSF ou Visual Web JSF? je sais que ce dernier est plus facile à créer des interfaces graphiques mais je veux connaitre quel est entre ces deux le plus facile lors d'appel des session bean.
    SVP, aidez-moi à résoudre mes 2 problèmes (choix de framework+appel des méthodes métiers).
    je vous remercie d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut urgent
    Salut,
    puisque je ne trouve pas beaucoup des documents concernant le framework "Visual web JSF", j'ai changé mon choix de framework, c'est à dire , j'ai choisi "JSF",
    en effet, l'architecture de mon projet web est la suivante:
    BD=> Entity Class=>Façade=>Pages web (JSF)
    par exemple, pour la page d'accueil, chaque utilisateur doit entrer son login et son mot de passe qui sont enregistrés dans la base de données.
    voici, le simple code que je fais:
    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
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
     
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
    <h:form id="logform">
    <h:panelGrid columns="3">
    <h:panelGroup id="l">
    <h:outputText value="Login "/>
    <h:inputText id="log" required="true" size="10"value="#{medecin.login}">
    </h:inputText>
    </h:panelGroup><br>
    <h:panelGroup id="p">
    <h:outputText value="Password "/>
    <h:inputSecret id="pass" required="true" maxlength="8" size="10"
    value="#{medecin.motPasse}">
    <f:validateLength minimum="3" maximum="8" />
    </h:inputSecret>
    </h:panelGroup><br>
    <h:commandButton value="Connecter" action="Menu"/>
    <h:message for="pass" showSummary="true" showDetail="false"/>
    <h:message for="logform" />
    </h:panelGrid>
    </h:form>          
     </body>
    </html>
    </f:view>
    et ceci le code au sein du fichier faces-config.xml:
    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
    <faces-config version="1.2" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <managed-bean>
    <managed-bean-name>medecin</managed-bean-name>
    <managed-bean-class>monpkg.entites.Medecins</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
    <display-name>Menu</display-name>
    <from-view-id>/Page1.jsp</from-view-id>
    <navigation-case>
    <from-outcome>menu</from-outcome>
    <to-view-id>/Page2.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    en effet, je n'arrive pas à lier la couche web à la couche métier.
    svp, y a -t-il quelqu'un qui peut me donner un coup de main; et merci d'avance.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Dans la déclaration de ton faces-config il faut que tu déclares une managed property qui fera appel à ton service métier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <managed-bean-property>
       <property-name>Name of the bean property.</property-name>
       <value>Default value of the property.</value>
    </managed-bean-property>
    et également définir un couple de getter / setter dans ton managed bean pour cette propriété

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut
    Salut,
    Merci *alexandre* pour l'aide,
    donc, j'ai modifié le code, ainsi la page d'accueil:
    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
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
     
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <%--
        This file is an entry point for JavaServer Faces application.
    --%>
    <f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>    
            <h:form id="formonglet">
                Login :        <h:inputText id="login" value="#{medecin.login}" />
                <br>
                Mot de passe : <h:inputText id="motPasse" value="#{medecin.motPasse}"/>
                <br>
                <input type="submit" action="success" value="Connecter" />
            </h:form> 
        </body>
    </html>
    </f:view>
    le fichier de configuration :
    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
    <?xml version='1.0' encoding='UTF-8'?>
     
    <!-- =========== FULL CONFIGURATION FILE ================================== -->
     
    <faces-config version="1.2" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
       <managed-bean>
            <managed-bean-name>medecin</managed-bean-name>
            <managed-bean-class>monpkg.entites.Medecins</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
            <managed-property>
                <property-name>login</property-name>
                <property-class>monpkg.entites.Medecins</property-class>
                <value>#{login}</value>
            </managed-property>
            <managed-property>
                <property-name>motPasse</property-name>
                <property-class>monpkg.entites.Medecins</property-class>
                <value>#{motPasse}</value>
            </managed-property>
        </managed-bean>
    <navigation-rule>
                  <from-view-id>/Page1.jsp</from-view-id>
           <navigation-case>
                  <from-outcome>success</from-outcome>
                  <to-view-id>/Page2.jsp</to-view-id>
           </navigation-case>
     </navigation-rule>
    </faces-config>
    Mon problème est le suivant: en faisant enter le login et le mot de passe qui sont enregistrés dans la base de données, puis, on clique sur le bouton "connecter", la même page (Page1.jsp) se charge et pas passage à l'autre page web, tandis que, la navigation est configurée dans le fichier faces-config.xml.
    svp, j'attends vos aides (je suis un peu débutant pour JSF)
    Merci d'avance.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut
    Bonjour,
    j'ai changé le code au sein de la page web, c'est à dire, j'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" action="success" value="Connecter" />
    par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton id="idBouton" action="success" value="Connecter" />
    Mais, en entrant des valeurs qui ne sont pas stockées dans la base de données, il y a aussi passage à la page2.
    Je sais qu'il faudra un code pour le test des valeurs , mais, je ne sais pas comment le faire (sachant que je voudrais que des utilisateurs distants peuvent accéder par leurs logins et mots de passes qui sont stockées dans la base de données)
    j'attends un coup de main, merci d'avance

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    sun à décider d'abandonner le projet woodstock pour privilégié icefaces ...mais si tu désires réellement utilisé jsf uniquement dans le code de ton action il faut que tu retournes un success ou failure (par exemple)

    j'aime personellement pas trop la manière dont la manière JSF simple utilise les navigation rules, je préfère de loin les actionListener de icefaces avec une paramétrisation des pages web ce qui permet d'alléger le code des managed bean avec la création d un mini moteur de worklow

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut le problème pas encore résolu
    Bonjour,
    j'ai modifié mon code de la manière suivante:
    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
     
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
     
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">        
        </head>
        <f:view>
        <body>
        <h:form id="testing">
        <h:panelGrid border="0" columns="2">
    	<h:outputText value="Login :"style="width: 80px; border: 0;"></h:outputText>
        <h:inputText id="login" value="#{medecin.login}" required="true"/>
    	<h:outputText value="Mot de passe :"></h:outputText>
        <h:inputSecret id="motPasse" value="#{medecin.motPasse}" required="true"/>
        <h:commandButton id="testing" action="#{medecinfacade.validateMedecin}" value="Connecter" immediate="true" type="submit" />
     
    </h:panelGrid>
     </h:form>
        </body>
    </html>
        </f:view>
    Quand, je fais enter un login et un mot de passe (qui sont déjà enregistrés dans la base de données)
    Glassfish affiche l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sourceId=null[severity=(ERROR 2), summary=(Login Failed!), detail=(login 'null' does not exist.)];|WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
    sourceId=null[severity=(ERROR 2), summary=(Login Failed!), detail=(login 'null' does not exist.)]
    svp, y a -t-il quelqu'un qui peut m'aider à résoudre mon problème, sachant que j'ai essayé à trouver une solution depuis longtemps, mais sans vain.
    Je vous remercie d'avance.

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    D'ou provient le message d'erreur detail=(login 'null' does not exist.) de la base de données ?

    Cela ressemble à un message dont la provenance est un FacesMessage mais je comprend pas dans quel contexte tu l'utilises vu que tu ne l'affiches pas dans ta page

    Es-ce que tu créer ce message dans ton managed bean lors de l'appel à une méthode d'authentification ?

    Essaye de debuger pourquoi ton login est nul.

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut
    Salut,
    D'ou provient le message d'erreur detail=(login 'null' does not exist.) de la base de données ?
    je trouve d'où vient ce message, mais, je ne sais pas comment résoudre le problème, en effet, en cliquant sur le bouton "se connecter", on fait appel à la méthode "validateMedecin" ayant comme role la vérification du login et de mot de passe , ceci une partie du code de mon session bean:
    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
     
     
    @Stateless 
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public class MedecinsFacade implements MedecinsFacadeLocal, MedecinsFacadeRemote {
        public static final String USER_SESSION_KEY = "medecin";
        @PersistenceContext
        private EntityManager em;
        private String login;
        private String motPasse;
         private String nom;
        private String prenom;
    @Resource
        private UserTransaction utx;
        public void create(Medecins medecins) {
            em.persist(medecins);
        }
     
        public Medecins find(Object id) {
            return em.find(Medecins.class, id);
        }
     
        public String validateMedecin() {
            FacesContext context = FacesContext.getCurrentInstance();
            Medecins medecin = getMedecin();
            if (medecin != null) {
                if (!medecin.getMotPasse().equals(motPasse)) {
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                               "la connexion est échouée!",
                                               "le mot passe est incorrect.");
                    context.addMessage(null, message);
                    return null;
                }
     
                context.getExternalContext().getSessionMap().put(USER_SESSION_KEY, medecin);
                return "se connecter";
            } else {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Login Failed!","login '"+ login +"' does not exist.");
                context.addMessage(null, message);
                return null;
            }
        }
         public String logout() {
            HttpSession session = (HttpSession)
                 FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            if (session != null) {
                session.invalidate();
            }
            return "login";
     
        }
     
     
    private Medecins getMedecin() {
            try {
                Medecins medecin = (Medecins)
                em.createNamedQuery("Medecins.findByLogin").
                        setParameter("login", login).getSingleResult();
                return medecin;
            } catch (NoResultException nre) {
                return null;
            }
        }
     
    }
    et pour le fichier de configuration, la redirection se fait comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <navigation-rule>
                  <from-view-id>/Page1.jsp</from-view-id>
           <navigation-case>  
                  <from-outcome>se connecter</from-outcome>
                  <to-view-id>/Page2.jsp</to-view-id>
           </navigation-case>
     </navigation-rule>
    j'attends vos coups de main et merci.

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Je comprend pas trop ton architecture, tu fais directement appel à ta "façade" depuis ta page jsf ???

    C'est pas un contexte classique. Si tu veux avoir quelque chose de mieux tu créer un managed bean (dont le cycle de vie est gérer par JSF) et qui lui possède une référence sur ta façade et tu l'injecte par Spring

    C'est également faux de mélanger les entités et les EntityManager (pas d'attribut login et mot de passe dans ta façade mais que des appel de méthode de type, find,create,update en utilisant le entityManager et en ayant comme paramètre un entity

    J'ai regardé ton faces-config et la encore tu mélanges un peu tout, Je suppose que médecin et ton EJB entité et dans ta définition de faces-config tu le définis comme managed bean alors qu'en aucun cas ca sera le cas

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut
    Salut,
    Salut,
    j'ai oublié que, dans le fichier de configuration, j'ai déjà écrit ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <managed-bean>
            <managed-bean-name>medecinfacade</managed-bean-name>
            <managed-bean-class>monpkg.façades.MedecinsFacade</managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>        
        </managed-bean>
    svp, je ne comprend pas ce que vous disez:
    C'est également faux de mélanger les entités et les EntityManager (pas d'attribut login et mot de passe dans ta façade mais que des appel de méthode de type, find,create,update en utilisant le entityManager et en ayant comme paramètre un entity
    en effet, je suis un peu débutant.

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Par défaut
    Salut *alexandre*,
    Je vous remercie pour votre le long de cette discussion, je veux vous informer que j'ai réussi à trouver une solution de problème (identification par le login et le mot de passe qui sont enregistrés dans la base de données), et j'ai testé son bon fonctionnement dans un réseau Intranet.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2009, 11h45
  2. [POO] Appel aux méthodes
    Par Simon30 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/10/2008, 20h08
  3. Réponses: 0
    Dernier message: 11/12/2007, 11h42
  4. Réponses: 10
    Dernier message: 23/06/2007, 16h13
  5. pb d'appel aux fonctions d'une DLL (visual C++ 6.0)
    Par touti35 dans le forum Visual C++
    Réponses: 4
    Dernier message: 12/12/2006, 09h37

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