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 :

Récupérer une image depuis le systeme de fichier


Sujet :

JSF Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut Récupérer une image depuis le systeme de fichier
    Bonjour , en faite je suis entrain de développer une application sous java EE avec le Framework JSF.

    Et j'ai quelque questions si vous aurais le temps pour me répondre:

    J'ai une classe Book avec un champ image de type String,l'utilisateur doit choisir une image depuis un dossier dans C: par exemple, comment je dois implémenté cette fonctionnalité car j'ai évité d’utiliser des objet blob pour la base de donné mais j'ai choisi d'enregistrer l'emplacement de l'image dans le système de fichier pour alléger la base de données.normalement l'utilisateur doit appuyer sur un bouton qui ouvre une fenêtre, l'utilisateur doit chercher son image et la sélectionner , le programme doit automatiquement enregistrer le chemin de l'image dans le champ imagePath de l'objet Book , bien sur j'utilise JSF avec Primefaces.

    Deuxième question:
    Normalement je dois créer un site commerce , dans la navbar je dois avoir un bouton Login si l'utilisateur n'est pas connecté ou un bouton se déconnecter si l'utilisateur est connecté, comment faire ceci .

    Troisième question :
    pour la classe Book j'ai un champ ISBN qui doit être généré automatiquement , comment implémenter une solution pour générer un ISBN pour chaque Book et éviter d'avoir un doublon.

    des idées générale que je cherche pour les implémenter moi même , je cherche pas que vous m’écriviez du code, mais des solutions , des idées si vous avez déjà eu de tels problèmes dans le passé.

    Je vous remercie beaucoup.

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Bonjour,

    Pour l'histoire de l'image, vous pourriez utiliser le composant FileUpload - Single de PrimeFaces. Vous stockez l'image à un emplacement sur disque et sauvegardez ce chemin en tant que chaîne de caractères sur la colonne correspondante de la table Book. J'ai expliqué un peu comment il faut faire dans cette discussion. J'avais utilisé la version 4.0 de PrimeFaces, si vous utilisez une autre version et il y a un souci: n'hésitez pas à nous en parler.

    Pour la deuxième question: vous pourriez déclarer un private boolean connected dans le bean qui gère l'utilisateur (ou l'authentification), mettre à "true" ce boolean lors de l'authentification réussie et utiliser les attributs rendered des divers éléments de la page qui interviennent lors de la connexion-déconnexion de l'utilisateur.

    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
    <h:panelGrid styleClass="blockLogin" columns="2">
               <h:outputText value="Identifiant" rendered="#{!utilisateurController.isConnected}"/>
               <h:inputText  value="#{utilisateurController.selected.login}" rendered="#{!utilisateurController.isConnected}"/>
     
               <h:outputText value="Mot de passe" rendered="#{!utilisateurController.isConnected}"/>
               <h:inputSecret  value="#{utilisateurController.tempPassword}" rendered="#{!utilisateurController.isConnected}"/>
     
               <p:commandButton value="Connexion" rendered="#{!utilisateurController.isConnected}" action="#{utilisateurController.doAuthenticate()}" ajax="false"/>
               <h:commandLink  value="Créer un compte" rendered="#{!utilisateurController.isConnected}" action="#{utilisateurController.doPrepareCreateUser()}"/>
     
                      <h:panelGrid style="width: 150px" columns="1" rendered="#{utilisateurController.isConnected}">
                              <h:outputText value="#{utilisateurController.selected.prenom} #{utilisateurController.selected.nom}"/>
                              <h:commandLink  value="Déconnexion" action="#{utilisateurController.doLogoutUser}"/>                        
                      </h:panelGrid>
     </h:panelGrid>
    En ce concerne l'ISBN, à ce que je sache c'est déjà une valeur unique (cf. Wikipédia). Je ne vois pas comment vous pourriez générer cette valeur.
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    un très grand merci à vous, je vais essayer d'appliquer ça ce soir.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    Pour l'image j'ai reçu cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: The request content-type is not a multipart/form-data
    normalement avec le rajout de la forme que vous m'avez proposé j'ai une forme imbriqué dans une autre, est ce que ça pose un problème.puisque le champ imagepath devra être un champ parmi d'autre dans le formulaire.

    Pour la deuxième question , en faite comme j'ai dit auparavant je dois créer un site e-commerce, l'utilisateur devra pouvoir se connecter,se déconnecter,remplir un panier et passer des commandes, pour ce but j'ai télécharger une application petstore(Antonio Goncalves) et j'ai essayé de voir comment il a implémenté ces mécanismes et j'ai pas compris quelques points:

    pour l'authentification de l'utilisateur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Inject
        @SessionScoped
        private transient LoginContext loginContext;
     @Inject
        private Conversation conversation;
    ce bout de code pour l'authentification
    et pour la déconnexion de l'utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     public String doLogout() {
            loggedinCustomer = null;
            // Stop conversation
            if (!conversation.isTransient()) {
                conversation.end();
            }
            addInformationMessage("been_loggedout");
            return "main.faces";
        }
    Ce que je comprends pas est que au moment de l'authentification on commence pas une conversation, mais juste au moment de la deconnexion.
    comment ça se passe l'authentification et la déconnexion en générale.


    Merci

  5. #5
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Citation Envoyé par momedalhouma Voir le message
    Pour l'image j'ai reçu cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: The request content-type is not a multipart/form-data
    Vous avez peut-être oublié de préciser le cotent-type du formulaire?

    Citation Envoyé par momedalhouma Voir le message
    normalement avec le rajout de la forme que vous m'avez proposé j'ai une forme imbriqué dans une autre, est ce que ça pose un problème.puisque le champ imagepath devra être un champ parmi d'autre dans le formulaire.
    Quoi qu'il arrive, il vaut mieux d'éviter d'imbriquer des h:form. Vous pourriez par exemple mettre le composant dans un p:dialog sur la page template.xhtml de votre application.
    Ce code est copié de mon application développée il y a quelque temps avec JavaEE6, alors vous allez remarquer des différences par rapport au code actuel de l'exemple sur le site PrimeFaces, il faut retenir juste le principe.

    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
    <h:body>       
     <h:form enctype="multipart/form-data" id="upForm">          
         <p:dialog header="Upload" modal="true" showEffect="fade" hideEffect="fade" widgetVar="dlgUp">              
    	<h:panelGrid columns="1" id="displayUpload">                  
    	    <p:fileUpload allowTypes="/(\.|\/)(gif|jpeg|png)$/" 
                        fileUploadListener="#{fileUploadController.handleFileUpload}" 
                        value="#{fileUploadController.uploadedFile}" mode="simple"/>            
    	    <p:commandButton value="Enregistrer" ajax="false"                                   
                        actionListener="#{fileUploadController.upload}" update="displayUpload" />              
            </h:panelGrid>         
         </p:dialog>      
     </h:form>
    
     <h:form id="mainForm">
         <p:layout>
             ...
         </p:layout>
     <h:form/>
     </h:body>

    Citation Envoyé par momedalhouma Voir le message
    Pour la deuxième question , en faite comme j'ai dit auparavant je dois créer un site e-commerce, l'utilisateur devra pouvoir se connecter,se déconnecter,remplir un panier et passer des commandes, pour ce but j'ai télécharger une application petstore(Antonio Goncalves) et j'ai essayé de voir comment il a implémenté ces mécanismes
    J'ai "survolé" le .zip de l'application mais je n'utilise pas Maven et pas le temps de creuser non plus. Si votre application ne comporte que deux types d'utilisateurs, vous pouvez regarder JAAS pour l'authentification. Sinon, vous pouvez utiliser des méthodes qui gèrent la connexion et la déconnexion dans le ManagedBean

    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
     
    // navigation vers la page 'par défaut" pour chaque rôle
    public String doAuthenticate() {
            String s;
            // dans la classe UtilisateurFacade.java il y a une méthode identifyUser(Utilisateur utilisateur) qui 
            // recherche un Utilisateur dans la base de données en fonction de son login et son mot de passe
            Utilisateur identifiedUser = getFacade().identifyUser(getSelected());
            if (identifiedUser == null) {
                JsfUtil.addErrorMessage(ResourceBundle.getBundle("/Bundle").getString("Message_Authentication_Error"));
            } else {
                 current = identifiedUser;
                 getPanierController().setCurrent(this.current.getPanier());
                 this.current.setPanier(getPanierController().getSelected());
                 isConnected = true;
            }
            switch (current.getFkrole().getIdrole()) {
                case 1:
                    s = "/Admin/admin.xhtml";
                    break;
                case 2:
                    isGerant = true;
                    s = "/GestionGerant/stockCritique.xhtml";
                    break;
                case 3:
                    s = "/utilisateur/vendeur.xhtml";
                    isVendeur = true;
                    break;
                case 4:
                    isLivreur = true;
                    s = "/GestionLivraison/planning.xhtml";
                    break;
                case 5:
                    s = "/utilisateur/comptable.xhtml";
                    break;
                case 6:
                    isRepresentant = true;
                    s = "/index.xhtml";
                    break;
                default:
                    s = "/index.xhtml";
                    break;
            }
            return s; 
        }
     
        public String doLogoutUser() {
            int role = current.getFkrole().getIdrole();
            String s;
            /*
             * Close session
             */
            ((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true)).invalidate();
            switch (role) {
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                    s = "/entreprise.xhtml";
                    break;
                default:
                    s = "/index.xhtml";
                    break;
            }
            return s;
        }
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    Enfaite je vous remercie pour votre aide.

    je suis encore occupé par cette application et j'ai d'autres questions parmi eux:

    normalement j'ai deux ManagedBean , Acount et ShopingCart , enfaite je dois avoir une instance de La classe Client dans les deux MangedBean , et normalement le même Client doit être dans les deux ManagedBean , j'ai essayé avec inject pour injecter le client , mais ça fonctionne pas , est ce que c'est la bonne façon de faire ça.

    la deuxième question c'est par rapport au scope des ManagedBeans , enfaite je sais pas quelles sont les meilleurs Scopes , par exemple pour la Shopingcart j'ai utilisé ConversationScoped, pour Acount(ManagedBean qui permet de permettre au client de se créer un compte et de se connecter) j'ai utilisé SessionScoped.je veux savoir en générale quelles sont les scopes que je dois utilisé dans une application Ecommerce.

    la troisième question est un peu étrange et je sais pas si vous pourriez me répondre , en faite dans mon application est divisée en deux partie , une interface pour les visiteurs,et une autre pour l'administrateur du site qui pourra par exemple supprimer des client : j'ai fait un test dans l'interface graphique visiteur je crée un Client , je me connecte (je verifie BD , le client se trouve bien dans la Table Client), à ce moment si j'essaye de supprimer le Client depuis l'interface administrateur une exception est lancé(malgré que le client se trouve dans la table et malgré que le client se trouve dans la listes des clients que j'utilise dans Le ManagedBean), cependant que je relance l'application l'administrateur pourra supprimer le client . en résumé si je me connecte et je me déconnecte dans une session , l'administrateur ne pourra pas supprimer ce Client sauf si on rétablie une nouvelle session.
    Bon j'ai fait une image pour vous expliquer l'architecture de la partie JSF si vous pourriez me guider:

    Nom : 914504749.png
Affichages : 139
Taille : 15,7 Ko

    JE vous remercie et j’espère que vous aurais le temps pour m'aider même si ça sera en général.

Discussions similaires

  1. Récupérer une image depuis un IntPtr
    Par Baud10 dans le forum C++/CLI
    Réponses: 4
    Dernier message: 17/01/2010, 17h26
  2. [MySQL] Récupérer une image depuis phpMyAdmin
    Par bonomsoleil dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 17/12/2008, 08h55
  3. Réponses: 3
    Dernier message: 10/11/2008, 11h58
  4. [Image] charger une image depuis un fichier xml.
    Par Invité dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/11/2006, 14h59

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