總結的東西了商店上傳的文件路徑:我想通過表單使用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;
但它始終爲空。我也試圖讓整個wydarzenieMB
內fileUploadController
和使用它的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
。
任何想法?
它的工作就像一個魅力,非常感謝你!永遠不會想到這一點。 – Celebes
不客氣的朋友:)祝你好運 –