【发布时间】:2015-02-21 00:45:03
【问题描述】:
我正在尝试使用<p:fileUpload> 更新多个文件。上传文件后,我设置了一个列表,其中的路径可以正常工作。
之后,用户必须填写一些其他可选信息,然后单击按钮(提交表单)。
当用户点击按钮时,所有在public void handleFileUpload(FileUploadEvent event) 上完成的列表信息都会丢失。
只有当用户单击按钮时,我才需要将路径保存在数据库中,我不明白为什么值会丢失,我正在使用@javax.faces.view.ViewScoped
此外,在处理handleFileUpload 时,用户在屏幕上所做的输入尚不可用。
- JSF 2.2
- CDI
- PrimeFaces 5.1
我将省略下面代码中的某些部分以避免使其变得庞大(如果您认为没有足够的信息,请告诉我)
XHTML:
<h:form>
<!-- OMITED -->
<p:dialog>
<!-- OMITED -->
<p:fileUpload fileUploadListener="#{csrBean.handleFileUpload}"
mode="advanced"
skinSimple="true"
cancelLabel="Cancelar"
multiple="true"
auto="false"/>
<!-- OMITED -->
</p:dialog>
<!-- OMITED -->
</h:form>
方法:
public void handleFileUpload(FileUploadEvent event) {
UploadedFile file = event.getFile();
String normalize = FilenameUtils.normalize("uploads/csr/"
+ csr.getNumero() + "/" + event.getFile().getFileName());
File destino = new File(normalize);
try {
FileUtils.copyInputStreamToFile(file.getInputstream(), destino);
} catch (IOException e) {
e.printStackTrace();
}
CsrOsAnexo anexo = new CsrOsAnexo();
anexo.setCaminho(normalize);
anexo.setOs(csr.getRespostaRecente().getOs());
csr.getRespostaRecente().getOs().getAnexoList().add(anexo);
FacesMessage message = new FacesMessage("Succesful", event.getFile()
.getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, message);
}
调试,我可以看到csr.getRespostaRecente().getOs().getAnexoList() 填充了所有存档路径,但是一旦handleFileUpload() 结束并且我转到commandButton 调用的方法,这些值就消失了,表单的值也被填充了.
【问题讨论】:
标签: jsf primefaces dialog view-scope