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 accéder a des ressources situées sur un serveur


Sujet :

JSF Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut comment accéder a des ressources situées sur un serveur
    bonjour tous le monde ,
    comment ,a paritr d'une page jsf , peut on consulter un fichier (pdf ou excel ) qui se situe dans un emplacement connu dans le serveur ,

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 46
    Points
    46
    Par défaut
    bien tous dépend de se que tu veut faire, si part exemple tu veut accéder et extraire les données tu peut le faire en java, coté jsf tu fait juste l'appelle a ta méthode java

    mais si tu veut afficher la page pdf dans le navigateur la c autre chose

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    oui dans mon serveur Jboss4.2.3GA j'ai un répéroitre contenant des fichiers ( chaque fichier est en trois formats: .pdf , .xls et .csv) dans un premièr temps j'affiche le contenu de mon répértoire dans un DataTable du 4 colonnes , dans chaque ligne du DataTable j'ai le nom du fichier ainsi que des commandlinks pour telecharger le fichier sous les trois formats (lien pour le telecharger en pdf ,un autre en xls et le dernier en csv ) ;
    merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 46
    Points
    46
    Par défaut
    alors dons ce cas la tu peut faire des méthodes java qui se charge de télécharger les fichiers avec n'importe quelle format.

    Exemple :

    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
     	public static byte[] loadFile(String FileName) throws IOException {
    		FileInputStream fis = null;
    		BufferedInputStream fileInBuf = null;
    		try {
    			if (FileName == null) {
    				return new byte[0];
    			}
    			FileInputStream fileIn = new FileInputStream(FileName);
    			fileInBuf = new BufferedInputStream(fileIn);
     
    			fis = new FileInputStream(FileName);
     
    			final int BUF_SIZE = 4096;
    			byte buf[] = new byte[BUF_SIZE];
    			int length = 0;
    			ByteArrayOutputStream baos = new ByteArrayOutputStream();
     
    			while ((length = fileInBuf.read(buf)) > 0) {
    				baos.write(buf, 0, length);
    			}
    			return baos.toByteArray();
     
    		} catch (IOException e) {
    			throw e;
    		} finally {
     
    			try {				
    				if (fis != null) {
    					fis.close();
    				}
    				if (fileInBuf != null) {
    					fileInBuf.close();
    				}
    			} catch (Exception e) {
     
    			}
    		}
    	}
    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
     
     
     
    	public String getUploadElement() {
     
     
    		HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
     
    		int buf_size = 32120;
    		int chunk_size = 48 * 1024;
     
    		ResourceBundle rb = ResourceBundle.getBundle("ApplicationResources");
     
     
    		URL news = null;
     
    			try {
    				news = new URL(adresse);
    				if (LOGGER.isDebugEnabled())
    					LOGGER.debug("-------******  news: " + news);
     
    				HttpURLConnection urlconnection = (HttpURLConnection)news.openConnection();
    				urlconnection.setDoOutput(true);
    				urlconnection.setDoInput(true);
    				urlconnection.setUseCaches (false);  
    				urlconnection.setDefaultUseCaches (false); 
    				urlconnection.setChunkedStreamingMode(chunk_size);
     
    				urlconnection.setReadTimeout(0);
     
    				OutputStreamWriter out = new OutputStreamWriter(urlconnection.getOutputStream());
    				out.write(sb.toString());
     
    				InputStream is = urlconnection.getInputStream();
     
    				int f = -1;
     
    				File tmpFile = File.createTempFile("documentation", ".zip");
     
    				byte buf[] = new byte[buf_size];
    				int length = 0;
    				BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tmpFile));	
    				while ((length = is.read(buf)) > 0) {
    					bos.write(buf, 0, length);
    				}
    				bos.close();
    				is.close();
     
    				response.setContentType("application/pdf");
    				response.addHeader("Content-Disposition", "attachment; filename=" + tmpFile.getName());
    				response.setHeader("Cache-Control","max-age=" + 90000);
    				response.addHeader("Content-description","My Description");
     
    				byte[] docfile = loadFile(tmpFile.getPath());
    				response.setContentLength(docfile.length);
    				f = -1;
    				is = new FileInputStream(tmpFile);
     
    				copy(is, response.getOutputStream());
    				response.getOutputStream().flush();
     
    				is.close();
    				tmpFile.delete();
     
    			} catch (Exception e) {
    				LOGGER.error("Erreur", e);
    				return "messageError";
     
    			}
     
    		return "";
     
    	}

    après il faut que t'a le lien du fichier et tu fait appelle a cette fonction "getUploadElement" a travers le paramètre action de t'a commande jsf.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Bonjour
    merci Arthurs pour ta réponse ,mais dans ta solution ou je vais préciser le chemin du fichier a telcharger ?
    je vais vous expliquer mon problème :
    dans Jboss4.2.3GA j'ai crée un répéroitre "Reports" qui contient 12 fichiers (4 fichiers chaque un d'eux en trois formats : pdf , xls et csv ) et j 'ai déclarer mon répertoire dans mon web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     <context-param>
            <param-name>Report</param-name>
            <param-value>D:\jboss-4.2.3.GA\Reports</param-value>
        </context-param>
    dans l'une de mes page jsf j'ai un Datatable qui contient les noms des fichiers ( sans extension) et des commandlink pour les telecharger sous le formats voulu(soit pdf soit xls soit csv)
    le code du ma page est la 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
    28
    29
    30
    31
    32
    33
    34
    35
     
               <html:form>
                    <html:dataTable headerClass="headers" width="100%" value="#{Report.reports}" var="ligne" rowClasses="ligne1,ligne2" >                   
                      <html:column>
                        <core:facet name="header" >
                          <html:outputText value="Fichier "/>    
                        </core:facet>
                         <html:outputText value="#{ligne}" />
                      </html:column>             
                     <html:column >
                        <core:facet name="header">
                          <html:outputText value="PDF " />
                        </core:facet>
                        <html:commandLink action="#{Report.loadPDF}" title="telecharger le fichier en format PDF" style="text-decoration :none ;">
                        <html:graphicImage value="/image/pdf.GIF" styleClass="image"/>
                        </html:commandLink>
                      </html:column> 
                      <html:column>
                       <core:facet name="header"> 
                             <html:outputText value="CSV "/>                    
                       </core:facet>
                       <html:commandLink action="#{Report.loadCSV}" title="telecharger le fichier en format CSV" style="text-decoration :none ;"> 
                           <html:graphicImage value="/image/csv.GIF" styleClass="image"/>
                       </html:commandLink>
                      </html:column>
                      <html:column>
                        <core:facet name="header">    
                          <html:outputText value="XLS "/>
                        </core:facet>
                        <html:commandLink action="#{Report.loadXLS}" title="telecharger le fichier en format XLS" style="text-decoration :none ;">
                        <html:graphicImage  value="/image/xls.GIF" styleClass="image"/>
                        </html:commandLink>
                      </html:column>
                    </html:dataTable>
                    </html:form>
    loadXLS , loadPDF et loadCSV sont des méthodes dans le beans qui associé à la page que j'ai cité ci dessus
    j'ai essayer un code pour les méthodes précédantes mais le problème c'est comment récupérer, a partir du DataTable ,le nom du fichier qui se trouve dans la meme ligne que le commandlink qui a provoqué l'action
    le corps des méthodes loadXLS ,loadPDF et loadCSV et le suivant:
    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
     
    public Class ReportBean{
       private List reports=null;//list pour remplire la colonne "Fichier" du DataTable
       String context = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("Report");
    ............/traitement pour remplir la liste
     
     public void loadPDF() throws IOException{
            String nom="";//c'est ce nom que je dois récupérer de la DataTable
            String reportPath =context+"\\"+nom+".pdf";
            File file = new File(reportPath);
            byte[] fileData = new byte[(int) file.length()];
            HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.setHeader("Content-disposition", "attachment;filename=rapport.pdf");
            response.setContentLength(fileData.length);
            response.getOutputStream().write(fileData);
            response.setContentType("application/pdf");
            response.getOutputStream().flush();
            response.getOutputStream().close(); 
        }
        public void loadXLS() throws IOException{
            String nom="";//c'est le nom qui existe dans la meme ligne avec le                    //Commandlink generant l'action loadXLS
            String reportPath =context+"\\"+nom+".xls";
            File file = new File(reportPath);
            byte[] fileData = new byte[(int) file.length()];
            HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.setHeader("Content-disposition", "attachment;filename=rapport.xls");
            response.setContentLength(fileData.length);
            response.getOutputStream().write(fileData);
            response.setContentType("application/vnd.ms-excel");
            response.getOutputStream().flush();
            response.getOutputStream().close();   
        }
        public void loadCSV() throws IOException{
            String nom="";/c'est ce nom que je dois récupérer de la DataTable
            String reportPath =context+"\\"+nom+".csv";
            File file = new File(reportPath);
            byte[] fileData = new byte[(int) file.length()];
            HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.setHeader("Content-disposition", "attachment;filename=rapport.csv");
            response.setContentLength(fileData.length);
            response.getOutputStream().write(fileData);
            response.setContentType("text/csv");
            response.getOutputStream().flush();
            response.getOutputStream().close();   
        }
    }
    vous trouverez ci joint un exemple du mon DataTable
    merci
    Images attachées Images attachées  

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 46
    Points
    46
    Par défaut
    Pour avoir la ligne tu peut utiliser le DataModel de la librairie Faces


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     	   // déclaration de ton dataModel
     
    	   	private DataModel monDataModel = new ListDataModel();  
     
    		// lier ton Report.reports avec ce dataModel
     
    		monDataModel.setWrappedData(Report.reports);
     
     
     
     
    		// danns tes fonction loadPDF .. tu fait ça pour avoir la ligne  
    		TonBeanReport bean = (TonBeanReport) monDataModel.getRowData();

    puis c'est le monDataModel que tu le met dans ta page jsf dans le datatable, tien un lien qui peut t'aider aussi
    http://java.developpez.com/faq/jsf/?...le_active_row1

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    merci Arthuris pour ton aides ,avant j'ai lu le faq mais j'ai pas bien saisie comment utiliser le DataModel maintenent c'est super, j'obtiens la valeur de la ligne du Datatable par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String nomfichier =(String) reportmodel.getRowData();
    avec reportmodel est mon DataModel avec lequel je rempli ma DataTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:DataTable value="#{Backup.reportmodel}"...>
    merci encore pour votre aide

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

Discussions similaires

  1. Comment afficher correctement des Balloon ToolTip sur des contrôles?
    Par NicolasJolet dans le forum Windows Forms
    Réponses: 22
    Dernier message: 31/12/2021, 15h42
  2. Acces a des fichiers situes sur une autre machine
    Par vsevel dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 19/06/2007, 18h23
  3. [VBA-E] Comment accéder à une variable tableau située dans un autre module
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/02/2007, 14h15
  4. [WinForms]Comment sont gérés des clics rapides sur un bouton
    Par NicolasJolet dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 25/10/2006, 13h34
  5. Réponses: 6
    Dernier message: 02/08/2005, 20h30

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