2013-04-12 82 views
0

總結的東西了商店上傳的文件路徑:我想通過表單使用fileUploadController ManagedBean作爲fileUploadListener一定的路徑<p:fileUpload>上傳用戶通過文件,然後相處這條道路與文件名和存儲它以某種方式(問題是 - 如何?)在wydarzenieMB ManagedBean,因爲我需要filePath作爲字符串在我的addWydarzenie()方法將此路徑存儲在數據庫中,稍後使用它。JSF PrimeFaces - 在另一個bean的屬性

我在我的數據庫中有一個名爲「Wydarzenie」的表。它有很多值,比如名字等等,我正在使用我的JSF表單specyfing用戶填充使用primefaces。獲取它們沒有問題,我只是使用ManagedBean來存儲輸入,然後使用此輸入使用addWydarzenie()方法寫入DataBase。在wydarzenieManagedBean

... 
<h:outputLabel for="opis" value="Opis :" /> 
<p:inputTextarea id="opis" value="#{wydarzenieMB.opis}" label="opis"> 
... 
<p:commandButton id="addWydarzenie" value="Zatwierdź" action="#{wydarzenieMB.addWydarzenie}" ajax="false"/> 

我addWydarzenie()方法:utworzWydarzenie.xhtml形式的

部分

public String addWydarzenie() { 
    try { 
     Wydarzenie wydarzenie = new Wydarzenie(); 
     ... 
     wydarzenie.setOpis(getOpis()); 
     ... 
     getWydarzenieServiceImpl().addWydarzenie(wydarzenie); 
     return SUCCESS; 
    } catch (DataAccessException e) { 
     e.printStackTrace(); 
    } 

    return ERROR; 
} 

沒有與價值沒有問題一樣,在這裏我使用p:inputText例如,因爲我指定我想要存儲它們的bean的值(例如:value="#{wydarzenieMB.opis}")。問題始於我<p:fileUpload>字段,因爲:
1.我不是specyfing值存在是因爲沒有返回值 - 唯一的文件上傳
2.我使用fileUploadController ManagedBean來處理文件上傳,但我想在文件路徑字符串(?)它擁有的上傳文件存儲在我的wydarzenieMB ManagedBean中。

下面是從utworzWydarzenie.xhtml形式上傳我的文件代碼:

... 
<h:outputLabel for="plakat" value="Plakat :" /> 
<p:fileUpload id="plakat" update="messages" fileUploadListener="#{fileUploadController.handleFileUpload}" multiple="false" sizeLimit="1000000" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" /> 
<p:growl id="messages" showDetail="true"/> 
... 

而且我fileUploadController類:

@ManagedBean(name="fileUploadController") 
@RequestScoped 
public class FileUploadController 
{ 
private String destination="E:/PROJEKT ZESPOLOWY/events/WebContent/resources/plakaty/"; 
private String sciezkaPliku = "";   // complete file path including destination and file name 

public void handleFileUpload(FileUploadEvent event) throws IOException { 
    FacesMessage msg = new FacesMessage("Plik: ", event.getFile().getFileName() + " został poprawnie wysłany na serwer."); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 

    String path = destination; 

    SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss"); 
    String name = fmt.format(new Date()) 
      + event.getFile().getFileName().substring(
        event.getFile().getFileName().lastIndexOf('.')); 
    File file = new File(path + name); 

    sciezkaPliku += path + name;   // I set file path here 

    InputStream is = event.getFile().getInputstream(); 
    OutputStream out = new FileOutputStream(file); 
    byte buf[] = new byte[1024]; 
    int len; 
    while ((len = is.read(buf)) > 0) 
     out.write(buf, 0, len); 
    is.close(); 
    out.close(); 
} 

public String getSciezkaPliku() { 
    return sciezkaPliku; 
} 

public void setSciezkaPliku(String sciezkaPliku) { 
    this.sciezkaPliku = sciezkaPliku; 
} 
} 

它被聲明爲ManagedBean因爲我試圖訪問其sciezkaPliku變量這是從wydarzenieMB這樣的文件路徑:

@ManagedProperty(value="#{fileUploadController.sciezkaPliku}") 
private String plakat; 

但它始終爲空。我也試圖讓整個wydarzenieMBfileUploadController和使用它的setter方法:

@ManagedBean(name="fileUploadController") 
@RequestScoped 
public class FileUploadController 
{ 
    @ManagedProperty(value="#{wydarzenieMB}") 
    WydarzenieManagedBean w; 

    public void handleFileUpload(FileUploadEvent event) throws IOException { 

     ... 
     sciezkaPliku += path + name;   // I set file path here 
     w.setPlakat(sciezkaPliku); 
     ... 

    } 
    ... 
} 

但它是不成功的無論是。當我從handleFileUpload打印sciezkaPliku即可,但是當我使用addWydarzenie()創建我的新Wydarzenie時,它始終是null

任何想法?

回答

0

如果我已經清楚地理解你的問題,我建議你在FileUploadController您的範圍更改爲「@SessionScoped」。我遇到了同樣的問題,並通過這種方式解決了問題。

檢查出來,並告訴我結果的;)

+0

它的工作就像一個魅力,非常感謝你!永遠不會想到這一點。 – Celebes

+0

不客氣的朋友:)祝你好運 –

相關問題