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
loginBean.linkList correspond à un Vector qui contient des objets de type FileWrapp
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>
- Classe FileWrapp
- Fichier getPdf.faces
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; } }
- Bean myBean
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(); %>
Merci de votre aide !
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; } }
Partager