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

JDeveloper Java Discussion :

Exploitation d'une donnée Blob dans JDev


Sujet :

JDeveloper Java

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut Exploitation d'une donnée Blob dans JDev
    j'ai une table dans la base qui contient une colonne de type blob c.a.d image
    dans jdev j'ai utilisé le mapping entre le relationnel et l'objet c.a.d j'ai generé
    une classe pour cette table ,mon probléme au moment de l'affichage d'une page JSF rattaché à ma table l'image n'apparait pas

  2. #2
    Membre chevronné

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Par défaut
    Bonjour,

    Il faut que tu expliques un peu plus ce que tu fais. Tu sembles penser que ton pb vient de la lecture de ton champ Blob mais je serai curieu de voir comment tu comptes l'afficher. Sinon j'ai fait un petit tutorial ou je manipule des champs de type Blob donc si tu veux y jeter un oeil...

    Bon courage.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut affichage d'image à partir d'une colonne blob d'oracle
    Bonjour Najib,

    L'affichage d'une image à partir d'une colonne blob est un peu compliqué et le problème, bien que connu, est un peu long à expliquer. Donc je vais directement te proposer une solution (qui marche avec Jdev 11):

    Supposant que tu as une table "user" avec les colonnes (nom, prenom, image)

    - Sur la page JSF il affiche l'image comme étant une champ "Input text" donc clic droit sur ce champ puis "convert" et puis tu choisis "image".

    - Tu crées une servlet qui aura pour rôle d'acquérir l'image depuis la BD et de la renvoyer en tant qu'un flux lisible par la page JSF.

    Voici un exemple de servlet que tu dois modifier :

    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
    package view.demo;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
     
    import java.util.Iterator;
    import java.util.Map;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import oracle.jbo.ApplicationModule;
    import oracle.jbo.Key;
    import oracle.jbo.Row;
    import oracle.jbo.ViewObject;
    import oracle.jbo.client.Configuration;
    import oracle.jbo.domain.BlobDomain;
     
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
     
    public class Servlet1 extends HttpServlet {
     
        private static final Log LOG = LogFactory.getLog(Servlet1.class);
        private static String lastPic = "";
     
     
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
        }
     
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
            String id=request.getParameter("id");
     
            if (id != null) {
                lastPic = id;
            }
     
            String imgno=request.getParameter("imgno");
     
            String appModuleName = "demo.model.AppModule";
            String appModuleConfig = "AppModuleLocal"; 
            String voQuery = "";
            if (id == null) {
                voQuery = "select employee_pic from pics where employee_id = '"+lastPic+"'";}
            else{
                voQuery = "select employee_pic from pics where employee_id = '"+id+"'";
            }
            String mimeType = "jpeg"; 
            ApplicationModule am = Configuration.createRootApplicationModule(appModuleName, appModuleConfig);
            ViewObject vo = am.createViewObjectFromQueryStmt("picsView", voQuery);
     
            // Run the query
            vo.executeQuery();
            // Get the result (only the first row is taken into account)
            Row product = vo.first();
     
            BlobDomain image = null;
            // Check if a row has been found
            if (product != null) {
     
                // We assume the Blob to be the first a field
                image = (BlobDomain)product.getAttribute(0);
     
                if (product.getAttributeCount() > 1) {
                    mimeType = (String)product.getAttribute(1);
                }
            } else {
                LOG.warn("No row found to get image from !!!");
                return;
            }
     
            response.setContentType("image/" + mimeType + "; charset=windows-1252");
            OutputStream os = response.getOutputStream();
            InputStream is = image.getInputStream();
     
            // copy blob to output
            byte[] buffer = new byte[4096];
            int nread;
            while ((nread = is.read(buffer)) != -1) {
                os.write(buffer, 0, nread);
            }
     
            os.close();
     
            // Remove the temporary viewobject
            vo.remove();
            // Release the appModule
            Configuration.releaseRootApplicationModule(am, false);
        }
    }
    Comme tu l'aurais remarqué cette sevlet accepte comme paramètre l'id de (l'utilisateur )

    - Enfin sur la la page JSF l'image ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <af:image shortDesc="#{bindings.EmployeePic.hints.tooltip}"
                                  binding="#{backingBeanScope.backing_PeopleAlbum.inputText2}"
                                  id="image"
                                  source="/servlet1?id=#{bindings.EmployeeId.inputValue}"
                                  inlineStyle="width:13%; height:42px;"/>
    A noter que la source de l'image n'est autre que le flux sortant du servlet (servlet1).

    Désolé si ce n'est pas assez claire mais en cas de problème je serai là.
    Bon travail

Discussions similaires

  1. Récupérer une donnée blob dans un RichEdit
    Par hugobob dans le forum Bases de données
    Réponses: 8
    Dernier message: 20/09/2008, 14h58
  2. Accéder à une donné X dans un fichier
    Par Baptiste Wicht dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 25/10/2006, 11h51
  3. Chercher une donnée existante dans un fichier
    Par BXDSPORT dans le forum Langage
    Réponses: 4
    Dernier message: 09/10/2005, 18h04
  4. [.NET][CR] Comment afficher une image blob dans un état ?
    Par moucrack dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/06/2005, 13h49
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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