Bonjour,

J'essaye actuellement de récuperer un fichier joint via UploadFile de richface afin de le sauvegarder en base.

Pris de la démo live de richface :

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
 
<h:form>
        <h:panelGrid columns="2" columnClasses="top,top">
            <rich:fileUpload fileUploadListener="#{fileUploadBean.listener}"
                maxFilesQuantity="#{fileUploadBean.uploadsAvailable}"
                id="upload"
                immediateUpload="#{fileUploadBean.autoUpload}"
                acceptedTypes="jpg, gif, png, bmp, ppt, pdf" allowFlash="#{fileUploadBean.useFlash}" uploadData="#{uploadData.listItem}" binding="">
                <a:support event="onuploadcomplete" reRender="ok" />
            </rich:fileUpload>
            <h:panelGroup id="info">
                <rich:panel bodyClass="info">
                    <f:facet name="header">
                        <h:outputText value="Uploaded Files Info" />
                    </f:facet>
                    <h:outputText value="No files currently uploaded"
                        rendered="#{fileUploadBean.size==0}" />
                    <rich:dataGrid columns="1" value="#{fileUploadBean.files}"
                        var="file" rowKeyVar="row">
                        <rich:panel bodyClass="rich-laguna-panel-no-header">
                            <h:panelGrid columns="2">
                                <a:mediaOutput element="img" mimeType="#{file.mime}"
                                    createContent="#{fileUploadBean.paint}" value="#{row}"
                                    style="width:100px; height:100px;" cacheable="false">
                                    <f:param value="#{fileUploadBean.timeStamp}" name="time"/>  
                                </a:mediaOutput>
                                <h:panelGrid columns="2">
                                    <h:outputText value="File Name:" />
                                    <h:outputText value="#{file.name}" />
                                </h:panelGrid>
                            </h:panelGrid>
                        </rich:panel>
                    </rich:dataGrid>
                </rich:panel>
                <rich:spacer height="3"/>
                <br />
                <a:commandButton action="#{fileUploadBean.clearUploadData}"
                    reRender="info, upload" value="Clear Uploaded Data"
                    rendered="#{fileUploadBean.size>0}" />
            </h:panelGroup>
        </h:panelGrid>
    </h:form>
Les Beans :
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
 
@Name("File")
public class File {
 
    private String Name;
    private String mime;
    private byte[] data;
 
    public File() {
    	System.out.println("-- FileBean : Constructor");
		// TODO Auto-generated constructor stub
	}
 
    public byte[] getData() {
        return data;
    }
    public void setData(byte[] data) {
    	System.out.println("File : Data : " + data.toString());
        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 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
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Name("fileUploadBean")
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 void paint(OutputStream stream, Object object) throws IOException {
        stream.write(getFiles().get((Integer)object).getData());
    }
    public void listener(UploadEvent event) throws Exception{
    	System.out.println("File Upload Bean : listener");
        UploadItem item = event.getUploadItem();
        byte[] data =  FileToByte(item.getFile());
        System.out.println("Name file : " + item.getFileName());
        System.out.println("Byte : " + data.toString());
        File file = new File();
        file.setName(item.getFileName());
        file.setData(data);
        files.add(file);
        System.out.println("size : " +files.size());
        uploadsAvailable--;
    }
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
 
@Name("uploadData")
public class UploadDataBean {
	private List<UploadItem> listItem;
	private List<byte[]> listByte;
 
	public UploadDataBean(){
		System.out.println("Testtt Upload bean constructor");
	}
 
	public List<UploadItem> getListItem() {
		return listItem;
	}
	public void setListItem(List<UploadItem> listItem) {
		for (int i = 0; i < listItem.size(); i++) {
			System.out.println("____List Item : " + listItem.get(i).toString());
		}
		this.listItem = listItem;
	}
 
	public List<byte[]> getListByte() {
		return listByte;
	}
	public void setListByte(List<byte[]> listByte) {
		for (int i = 0; i < listByte.size(); i++) {
			System.out.println("____List Byte : " + listByte.get(i).toString());
		}
		this.listByte = listByte;
	}
Et au final, je voudrais pouvoir insérér ce fichier joint dans une vue xhtml, généré par seam :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<s:decorate id="fichierField" template="layout/edit.xhtml">
                <ui:define name="label">Fichier</ui:define>
                <h:outputText id="fichier" value="#{fichier.instance.setFichier(file.data)}"/>
                <h:inputText id="fichierF" required="true"  size="12" maxlength="12"
                          					value="#{fichier.instance.fichier}"/> //fichier étant de type byte[]
            </s:decorate>

Mais je n'arrive pas à faire cette dernière partie, je m'y prends surement mal.

Je récapitule :

-1 : j'upload un file avec un composant Rich:uploadFile
-2 : mon bean récupère les données et le converti en byte[]
-3 : je veux que cette valeur pointe sur mon "Fichier.instance.fichier" dans mon formulaire d'insertaion, pour le sauvegarder en base de donnée dans un type Blob.

Ca fait un jour que je tourne en rond, merci pour vos aides éclairées.