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

NetBeans Java Discussion :

[Visual Web] [SJSC] Liaison d'un champs longblob de ma base mysql à un composant ImageComponent


Sujet :

NetBeans Java

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Par défaut [SJSC] Liaison d'un champs longblob de ma base mysql à un composant ImageComponent
    Bonjour,

    Je n'arrive vraiment pas à me dépatouiller.
    J'ai une page JSP avec un ImageComponent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ui:image align="#{SessionBean1.productRowSetDataProvider.cachedRowSet.currentRow['PICTURE']}" alt="Photo non disponible" binding="#{item_card.pic1}" 
    height="169" id="pic1" style="border-width: 1px; border-style: solid; border-color: rgb(0, 102, 153) rgb(0, 102, 153) rgb(0, 102, 153) rgb(0, 102, 153); 
    color: gray; left: 519px; top: 71px; position: absolute" width="210"/>
    J'ai lié ce composant à ma base de donnée MySQL (champs PICTURE), mais lorsque je veux accéder à la page où doit apparaitre cette photo, j'ai cette exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Description :  Une exception non gérée s'est produite lors de l'exécution de l'application Web. Pour plus d'informations sur cette erreur, consultez la trace de pile suivante.
     
    Détails de l'exception : org.apache.jasper.JasperException
      java.lang.ClassCastException: [B
     
    Source d'erreur possible :
       Nom de la classe : org.apache.jasper.servlet.JspServletWrapper
       Nom du fichier : JspServletWrapper.java
       Nom de la méthode : handleJspException
       Numéro de ligne : 510
     
    Source non disponible. Les informations relatives à l'emplacement de l'exception peuvent être identifiées grâce à la trace de pile de l'exception ci-dessous.
    Je ne comprends pas. J'ai essayé d'insérer des images de différents formats dans ma base (jpg, png, bmp), mais j'ai toujours la même erreur.

    Y'a-t-il une manière bien précise de lier les images d'une base de données ?

    Toute réponse est la bienvenue, je suis complètement paumé.

    Nico

    [Edit] Est-ce qu'il ne faudrait pas que j'utilise un autre composant pour faire la liaison à la bdd ?

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Par défaut
    Pour ceux que çà intéresse, j'ai trouvé la réponse...
    En fait n ne peux pas lier directement un champs BLOB à un composant image dans JSC.
    Il faut créer une Servlet à part, et associer au composant image une url qui appelle cette servlet.
    Voici pour ceux qui pourraient tomber dessus :
    Ma servlet :
    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
     
    public class DisplayPicture extends HttpServlet {
     
        /** Creates a new instance of DisplayPicture */
        public DisplayPicture() {
        }
     
     
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
     
        }
     
        public void destroy() {
        }
     
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
     
     
            String id=request.getParameter("imageid");
            String ct=request.getParameter("contenttype");
            if ((ct==null)||(ct.equals(""))) {
                ct="image/x-jpeg";
            }
            System.out.println("Now displaying image with ID: "+id);
     
            try {
                ServletOutputStream out = response.getOutputStream();
                response.setContentType(ct);
                out.write(this.getImage(id));
            } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
     
        /** Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        /** Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        /** Returns a short description of the servlet.
         */
        public String getServletInfo() {
            return "Displays a picture from the database identified by a parameter IMAGEID";
        }
     
        private byte[] getImage(String id) {
            Statement sta=null;
            Connection con=null;
            DataSource ds=null;
            ResultSet rs=null;
            byte[] result=null;
     
            try {
                Context initCtx = new InitialContext();
                ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mos_data");
                con = ds.getConnection();
                sta = con.createStatement();
                rs=sta.executeQuery("SELECT PICTURE FROM product WHERE id='"+id+"'");
                if (rs.next()) {
                    result=rs.getBytes("PICTURE");
                } else {
                    System.out.println("Could find image with the ID specified or there is a problem with the database connection");
                }
                rs.close();
                sta.close();
                con.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
            return result;
        }
     
    }
    et un exemple de balise image dans une page jsp...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ui:image alt="Photo non disponible" binding="#{item_card.pic1}" height="169" id="pic1"   style="border-width: 1px; border-style: solid; 
    border-color: rgb(0, 102, 153) rgb(0, 102, 153) rgb(0, 102, 153) rgb(0, 102, 153); color: gray; left: 519px; top: 71px; position: absolute"
      url="./DisplayPicture?imageid=#{SessionBean1.productRowSetDataProvider.cachedRowSet.currentRow['ID']}" width="210"/>
    Bien entendu, il ne faut pas oublier de déclarer la nouvelle servlet dans web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <servlet>
            <servlet-name>DisplayPicture</servlet-name>
            <servlet-class>mos_server.DisplayPicture</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>DisplayPicture</servlet-name>
            <url-pattern>/DisplayPicture</url-pattern>
        </servlet-mapping>
    Voilà, à customiser suivant vos besoins

    Nico

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

Discussions similaires

  1. [MySQL] Insertion champ fichier dans une base MySql
    Par lemzo84 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/02/2015, 23h37
  2. [WD9] Pb de liaison entre 2 champ
    Par loic20h28 dans le forum WinDev
    Réponses: 24
    Dernier message: 14/03/2008, 21h28
  3. Liaison sur un champ partiel ou par concaténation
    Par Grégory PLANCHAT dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/09/2007, 16h11
  4. liaison de 2 champs
    Par Bubut dans le forum Modélisation
    Réponses: 6
    Dernier message: 24/05/2007, 16h08
  5. [MySQL] Afficher une image d'un champ blob d'une base MySQL
    Par lolobedo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/11/2005, 10h10

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