Bonjour,
j'essaye de mettre en place un upload de fichiers sur struts 2, malheureusement la variable File est null en sortie. Voici certains des fichiers que j'utilise:
struts.xml
ClientAction.java
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 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <package name="exemple16" namespace="/" extends="struts-default"> <default-action-ref name="Lister_Client" /> <action name="Lister_Client" class="exemple16.ClientAction" method="lister"> <result>/jsp/ListerClient.jsp</result> </action> <action name="Ajouter_Client" class="exemple16.ClientAction" method="ajouter"> <interceptor-ref name="fileUpload"> <param name="maximumSize">102400</param> <param name="allowedTypes">image/gif,image/jpeg,image/png</param> </interceptor-ref> <interceptor-ref name="basicStack"/> <result name="success" type="redirectAction">Lister_Client</result> </action> </package> </struts>
ListerClient.jsp
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 package exemple16; import java.io.File; import java.util.List; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import exemple16.javabeans.Client; import exemple16.modele.ClientModele; @SuppressWarnings("serial") public class ClientAction extends ActionSupport { private Client client; private List<Client> listeClients; private File image; private String imageFileName; private String imageContentType; public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public String getImageContentType() { return imageContentType; } public void setImageContentType(String imageContentType) { this.imageContentType = imageContentType; } public Client getClient() { return client; } public void setClient(Client client) { this.client = client; } public List<Client> getListeClients() { listeClients=ClientModele.getListeClients(); return listeClients; } public void setListeClients(List<Client> listeClients) { this.listeClients = listeClients; } // retourner la liste des clients après récupération public String lister() { listeClients=ClientModele.getListeClients(); return SUCCESS; } // ajouter le client dans le modèle public String ajouter() throws Exception { // placer le nom du fichier dans le client if(this.imageFileName!=null) { client.setImage(this.imageFileName); // copier le fichier dans le répertoire de l'application imagesclients ServletContext context=ServletActionContext.getServletContext(); String repertoireImagesClient=context.getRealPath("imagesclients"); File sauvegardeImage=new File(repertoireImagesClient,this.imageFileName); this.image.renameTo(sauvegardeImage); ClientModele.ajouter(this.client); } return SUCCESS; } }
Je me suis aperçu que dans ClientAction.java la variable imageFileName était à null.
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 <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Liste des clients</title> <style type="text/css">@import url(css/styles.css);</style> </head> <body> <!-- Message d'erreur --> <s:if test="errors.size()>0"> <div id="message_erreur"> <label>Les erreurs suivantes se sont produites : </label> <ul><s:fielderror/></ul> </div> </s:if> <!-- Message d'erreur lors des actions --> <s:if test="errorMessages.size()>0"> <div id="message_erreur"> <label>Les erreurs d'action suivantes se sont produites : </label> <ul><s:actionerror/></ul> </div> </s:if> <!-- Message de succès --> <s:if test="actionMessages.size()>0"> <div id="message_information"> <ul><s:actionmessage/></ul> </div> </s:if> <div id="enveloppe"> <h3>Ajouter un client</h3> <s:form method="post" action="Ajouter_Client" enctype="multipart/form-data"> <s:textfield name="client.identifiant" id="client.identifiant" label="Identifiant" labelposition="top" cssClass="input"/> <s:textfield name="client.motdepasse" id="client.motdepasse" label="Mot de passe" labelposition="top" cssClass="input"/> <s:file name="image" id="image" label="Image" labelposition="top" cssClass="input"/> <s:submit value="Ajouter un client"/> </s:form> <table border="0" id="tableau" cellpadding="0" cellspacing="0"> <tr><td><b>ID</b></td><td><b>Identifiant</b></td><td><b>Mot de passe</b></td><td><b>Image</b></td></tr> <s:iterator value="listeClients" status="ligne"> <s:if test="#ligne.odd"><tr class="ligne1"></s:if> <s:if test="#ligne.even"><tr class="ligne2"></s:if> <td><s:property value="idClient"/></td> <td><s:property value="identifiant"/></td> <td><s:property value="motdepasse"/></td> <s:if test="image!=null"> <td><img src="imagesclients/${image}" width="40" height="40"/></td> </s:if> <s:else> <td> </td> </s:else> </tr> </s:iterator> </table> </div> </body> </html>
Hors sur un post que j'ai trouvé sur un forum, la personne avait ceci comme problème:
Voici la réponse:In my struts2 application I am using “File Upload Interceptor”. Its running well but after uploading when same jsp page appears it does not show browsed file name in the textbox of <s:file> tag i.e textbox comes empty after successful uploading.
Je suppose que j'ai le même problème, j'aurais souhaité savoir, comment je pouvais contourner le problème pour mon exemple, si cela était possible.This is not a problem of Struts. For security reasons modern browser don't allow to set a value for file upload fields. If you want to display the file name after the upload you'll have to use simple text.
Merci d'avance pour votre réponse.
Mumu27
Partager