Bonjour,
J'ai un problème lorsque j'essai de charger des fichiers, une exception java.lang.NullPointerException se déclenche au moment du chargement du fichier.
Ma première question est la suivante, est ce que la valeur de l'attribut fileUploadListener doit correspondre à un attribut d'un bean ou à une méthode ?
voici la partie de code que j'ai utiliser pour faire l'upload :
Le fichier FileUploadBean :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <rich:fileUpload acceptedTypes="jpg, gif, png, bmp" fileUploadListener="{fileUploadBean.listener}" maxFilesQuantity="#{fileUploadBean.uploadsAvailable}" immediateUpload="#{fileUploadBean.autoUpload}" uploadData="#{fileUploadBean.files}" id="upload" listHeight="60px" listWidth="250px" clearControlLabel="Annuler" uploadControlLabel="Charger" clearAllControlLabel="Effacer tous" doneLabel="Succés" stopControlLabel="Arreter" addControlLabel="Ajouter..."> <a4j:support event="onuploadcomplete" /> </rich:fileUpload>
Le fichier File :
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 package file; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import org.richfaces.event.UploadEvent; import org.richfaces.model.UploadItem; public class FileUploadBean{ private ArrayList<File> files = new ArrayList<File>(); private int uploadsAvailable = 1; private boolean autoUpload = false; private boolean useFlash = false; public int getSize() { if (getFiles().size()>0){ return getFiles().size(); }else { return 0; } } public FileUploadBean() { } public synchronized void paint(OutputStream stream, Object object) throws IOException { stream.write(getFiles().get((Integer)object).getData()); } public synchronized void listener(UploadEvent event) throws Exception{ UploadItem item = event.getUploadItem(); File file = new File(); file.setLength(item.getData().length); file.setName(item.getFileName()); file.setData(item.getData()); files.add(file); uploadsAvailable--; } public String clearUploadData() { files.clear(); setUploadsAvailable(5); return null; } public long getTimeStamp(){ return System.currentTimeMillis(); } public ArrayList<File> getFiles() { return files; } public void setFiles(ArrayList<File> files) { this.files = files; } public int getUploadsAvailable() { return uploadsAvailable; } public void setUploadsAvailable(int uploadsAvailable) { this.uploadsAvailable = uploadsAvailable; } public boolean isAutoUpload() { return autoUpload; } public void setAutoUpload(boolean autoUpload) { this.autoUpload = autoUpload; } public boolean isUseFlash() { return useFlash; } public void setUseFlash(boolean useFlash) { this.useFlash = useFlash; } }
Finalement j'ai rajouté deux paramètres dans le filter au niveau du fichier web.xml :
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 package file; public class File { private String Name; private String mime; private long length; private byte[] data; public byte[] getData() { return data; } public void setData(byte[] data) { this.data = data; } public String getName() { return Name; } public void setName(String name) { Name = name; int extDot = name.lastIndexOf('.'); if(extDot > 0){ String extension = name.substring(extDot +1); if("bmp".equals(extension)){ mime="image/bmp"; } else if("jpg".equals(extension)){ mime="image/jpeg"; } else if("gif".equals(extension)){ mime="image/gif"; } else if("png".equals(extension)){ mime="image/png"; } else { mime = "image/unknown"; } } } public long getLength() { return length; } public void setLength(long length) { this.length = length; } public String getMime(){ return mime; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14<filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> <init-param> <param-name>createTempFiles</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>maxRequestSize</param-name> <param-value>20000000</param-value> </init-param> </filter>
Partager