0

要約すると、特定のパスにManagedBeanを<p:fileUpload>使用してフォームを介してユーザーから渡されたファイルをアップロードし、ファイル名とともにこのパスを取得して、ManagedBean に何らかの形で保存します (問題は - どうやって?) 。このパスをデータベースに保存し、後で使用するには、メソッドで文字列として必要です。fileUploadControllerfileUploadListenerwydarzenieMBfilePathaddWydarzenie()

データベースに「Wydarzenie」という名前のテーブルがあります。ユーザーがプライムフェイスを使用して入力できるように、JSFフォームで指定している名前などの多くの値があります。それらを取得することに問題はありません。ManagedBean を使用して入力を保存し、後でこの入力を使用して addWydarzenie() メソッドを使用して DataBase に書き込みます。

utworzWydarzenie.xhtml フォームの一部:

...
<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"/>

wydarzenieManagedBean の私の addWydarzenie() メソッド:

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

    return ERROR;
}

格納したいp:inputTextBean の値 (例: ) を指定するので、たとえば使用するような値で問題はありません。value="#{wydarzenieMB.opis}"問題は私の<p:fileUpload>フィールドから始まります:
1. 値が返されないため、そこに値を指定していません (?) - アップロードされたファイルのみ
2.fileUploadControllerファイルのアップロードを処理するために ManagedBean を使用していますが、所有しているアップロードされたファイルの filePath 文字列が必要です私のwydarzenieMBManagedBeanに格納されます。

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;
}
}  

次のようsciezkaPlikuにファイルパスである変数にアクセスしようとしたため、ManagedBean として宣言されています。wydarzenieMB

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

しかし、それは常にヌルでした。wydarzenieMBまた、内部全体を取得して、そのfileUploadControllerセッターメソッドを使用しようとしました:

@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);
        ...

    }
    ...
}

しかし、それも失敗でした。ファイルは問題なくアップロードされ、指定されたフォルダーに保存されます。sciezkaPlikuそこから印刷するときは問題ありませhandleFileUploadんが、それを使用して新しい Wydarzenie を作成するときaddWydarzenie()は常にnull.

何か案は?

4

1 に答える 1