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 :

Utilisation du "save link as" sur un outputLink sous Firefox et sous IE


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Points : 22
    Points
    22
    Par défaut Utilisation du "save link as" sur un outputLink sous Firefox et sous IE
    Bonjour à tous,

    Voilà, j'ai un tableau contenant des liens vers des fichiers stockés localement sur un pc. Ces liens sont des outputLink.

    Sous Internet Explorer quand je clique (clic gauche) sur un lien le fichier correspondant est effectivement ouvert. Et quand je clique avec le clic droit et que je sélectionne "Enregistrer la cible du lien sous" la boîte de dialogue propose d'enregistrer le fichier au format correspondant au format d'origine du fichier.

    Jusque là pas de problème !

    Sous Firefox, quand je clique (clic gauche) pareil ça ouvre bien le fichier. Par contre quand je clique avec le clic droit et que je sélectionne "Enregistrer la cible du lien sous" la boîte de dialogue ne propose pas d'enregistrer sous le format d'origine du fichier et le nom du fichier proposé par défaut n'est pas le bon (ici il me propose d'enregistrer un fichier nommé "getPdf.faces"). Si j'enregistre le fichier, je n'obtiens pas le bon fichier (même en renommant).

    Si vous avez une idée du blême ..

    Ci-dessous le code :

    - Page où se trouve le tableau avec les liens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <h:form id="displayInvoicesForm">
                            <t:dataTable id="invoiceDataTable" styleClass="dataTable" value="#{loginBean.linkList}" binding="#{myBean.invoiceTable}" var="row" rowClasses="dataTableRow" headerClass="dataTableHeader" dir="LTR" cellspacing="0" border="0" width="200">                
     
                                <t:column>
                                    <h:outputLink id="downloadPdfInline" value="getPdf.faces" target="_blank">
                                        <f:param id="path" name="path" value="#{row.file.path}"/>
                                        <h:outputText value="#{row.file.name}" styleClass="fileNameForm"/>
                                    </h:outputLink>
                                </t:column>                    
                            </t:dataTable>
                            <h:message for="displayInvoicesForm" styleClass="errorMessage"/>
                        </h:form>
    loginBean.linkList correspond à un Vector qui contient des objets de type FileWrapp

    - Classe FileWrapp

    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
     
     
    package wrappers;
     
    import java.io.File;
     
    public class FileWrapp {
        private File file;
        private Integer idFile;
     
        public FileWrapp() {
        }
     
        public FileWrapp(Integer idFile, File file) {
            this.idFile = idFile;
            this.file = file;
        }
     
        public File getFile(){
            return file;
        }
     
        public void setFile(File file){
            this.file = file;
        }
     
        public Integer getIdFile(){
            return idFile;
        }
     
        public void setIdFile(Integer idFile){
            this.idFile = idFile;
        }
    }
    - Fichier getPdf.faces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <%
        MUDPackage.MyBean myBean = (MUDPackage.MyBean) session.getAttribute("myBean");
        myBean.downloadPdfInline();
    %>
    - Bean myBean

    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
    97
    98
    99
     
    package MUDPackage;
     
    import java.io.File;
    import java.io.IOException;
     
    import java.util.Locale;
    import java.util.Map;
    import java.util.ResourceBundle;
     
    import javax.faces.application.FacesMessage;
    import javax.faces.component.UIData;
    import javax.faces.component.UIViewRoot;
    import javax.faces.context.FacesContext;
     
    import javax.servlet.http.HttpServletResponse;
     
    import wrappers.FileWrapp;
     
    public class MyBean {
     
        private UIData invoiceTable, reportTable;
     
        private ResourceBundle rb = null;
     
        public MyBean(){
            FacesContext fc = FacesContext.getCurrentInstance();
            UIViewRoot root = fc.getViewRoot();
            String mbName = fc.getApplication().getMessageBundle();
            Locale locale = root.getLocale();
            rb = ResourceBundle.getBundle(mbName, locale);
        }
     
        public void setInvoiceTable(UIData invoiceTable) {
            this.invoiceTable = invoiceTable;
        }
     
        public UIData getInvoiceTable() {
            return invoiceTable;
        }
     
        public void setReportTable(UIData reportTable) {
             this.reportTable = reportTable;
        }
     
        public UIData getReportTable() {
            return reportTable;
        }
     
        public void openFile(File f, String formName){        
     
            FacesContext context = FacesContext.getCurrentInstance();
     
            // Download file.        
            if(f.exists()){
     
                HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
                try {                
                    HttpServletUtil.downloadFile(response, f, false);
                } catch (IOException e) {                
                    System.out.println("erreur");
                }         
                context.responseComplete();
            }else{
               FacesMessage message = new FacesMessage(rb.getString("linkPage_fileNotExists"));
               context.addMessage(formName, message); 
            }
        }
     
        public void downloadPdfInline() {       
            String formName="displayInvoicesForm";
            String path = getParameter("path");
            File f = new File(path);
            openFile(f, formName);        
        }
     
     
        public void downloadReport() {
            FileWrapp fw=(FileWrapp)getReportTable().getRowData();
            String formName="displayInvoicesForm2";
            openFile(fw.getFile(), formName);        
        }
     
        /**
         * @param parameterName
         * @return
         */
        public String getParameter(String parameterName) {
            Map parameters = 
                FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
            String value = (String)parameters.get(parameterName);
            if (value == null || value.length() == 0) {
                throw new IllegalArgumentException("Could not find parameter '" + 
                                                   parameterName + 
                                                   "' in request parameters");
            }
            return value;
        }
    }
    Merci de votre aide !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Ca me parait normal :

    Ton lien ne pointe pas sur un PDF mais sur getPDF.faces qui est une JSP.

    Donc firefox enregistre ce que tu demande, à savoir la JSP.

    Par contre, IE doit intégrer un mécanisme qui va chercher la cible de la cible.
    (c'est possible de le faire avec des plugin firefox).


    Pour résumer, ton problème n'est pas "ça marche pas avec firefox" mais plutôt "ça marche avec IE alors que ça devrai pas"

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Ok, c'est vrai que ça paraît logique l'origine du "problème" ..

    Donc si je comprends bien, il n'y a pas vraiment de solution tant que j'appelle une fonction ou une page à travers un outputLink ou un commandLink.

    L'ennui c'est que je dois forcément faire en sorte qu'"enregistrer la cible du lien sous" fonctionne sous Internet explorer et Firefox pour mon projet, les fichiers étant stockés en local ..

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Pourquoi tu ne met pas tes fichiers dans un dossier genre

    /Downloads/monPDF.pdf


    avec

    <h:outputLink value="/Downloads/monPDF.pdf"> ?

    EDIT : je dis surement une connerie, je nais jamais fais de DL avec JSF ou JSP

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    J'ai changé comme tu as dit et ça marche En fait, avant je mettais pour mes fichiers des liens du style "C:/dossier_fichiers/..." et évidemment les fichiers ne risquaient pas de s'ouvrir directement en cliquant sur les liens. Donc il fallait passer par une méthode. Mais maintenant plus besoin de méthode !

    Par contre, j'ai encore un problème : lorsque je fais "Enregistrer la cible du liens sous.." avec un fichier excel sous Internet explorer, il me l'interprète comme un fichier zip. Comment régler ça ? Y a-t-il un moyen de préciser le type de fichier à ouvrir dans un outputLink ?

    Je mets le nouveau code au cas où

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <h:form id="displayInvoicesForm">
                            <t:dataTable id="invoiceDataTable" styleClass="dataTable" value="#{loginBean.linkList}" binding="#{myBean.invoiceTable}" var="row" rowClasses="dataTableRow" headerClass="dataTableHeader" dir="LTR" cellspacing="0" border="0" width="200">                
     
                                <t:column>
                                    <h:outputLink id="downloadPdfInline" value="#{row.file.path}" target="_blank">
                                        <h:outputText value="#{row.file.name}" styleClass="fileNameForm"/>
                                    </h:outputLink>
                                </t:column>                   
                            </t:dataTable>
                            <h:message for="displayInvoicesForm" styleClass="errorMessage"/>
                        </h:form>
    Internet explorer sux !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Enregistrer sous ne te l'enregistre pas comme un fichier .xls ??

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    Pas sous Internet Explorer en tout cas J'ai essayé d'utiliser des mimeType pour l'attribut type de outputLink en mettant "application/vnd.ms-excel" puis "application/vnd.openxmlformats-officedocument.spreadsheetml/sheet" ça ne change rien ..

    Et en fait ça le considère également comme un zip quand je clic sur le lien sans faire "Enregistrer sous".

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Je pense que ça doit venir de tes association de fichier sur ton OS qui sont foireuses...

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    J'ai vérifié mes associations de fichiers y'a pas de problème à priori .. J'ai même essayé sur d'autres PCs, marche pas non plus ..

Discussions similaires

  1. Un lien sur un calque ne fonctionne pas sous Firefox
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/10/2007, 22h01
  2. PB lien sur image sous IE, pas sous Firefox.
    Par django29 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/08/2006, 15h54

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