2013-04-12 48 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

不客气的朋友:)祝你好运 –

相关问题