首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将上传的文件保存在表单中,直到使用jsf-2和primefaces-3.4提交

如何将上传的文件保存在表单中,直到使用jsf-2和primefaces-3.4提交
EN

Stack Overflow用户
提问于 2012-10-16 19:06:21
回答 1查看 2.3K关注 0票数 4

我有很多输入字段的表单,加上上传多个文件的primefaces组件"p:fileUpload“当我提交表单时,我无法获得上传的文件。被管理的bean是"RequestScoped“。那么,如何才能在不使manged bean View作用域的情况下获得上传的文件呢?

upload方法

代码语言:javascript
运行
复制
    public void upload(FileUploadEvent event) {
    try {
        FacesMessage msg = new FacesMessage("Success! ", event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        // Do what you want with the file
        String thumbnail = getDestination() + event.getFile().getFileName();
        int index = thumbnail.lastIndexOf('.');
        SystemFile systemFile = new SystemFile();
        systemFile.setAccount(getActor().getAccount());
        systemFile.setName(event.getFile().getFileName());
        systemFile.setPath(getTalentPath());

        systemFile.setFileType(FileUtil.checkFileType(thumbnail.substring(index + 1)));
        if (systemFiles == null) {
            systemFiles = new ArrayList<>();
        }
        systemFiles.add(systemFile);
        copyFile(event.getFile().getFileName(), event.getFile().getInputstream());
    } catch (IOException ex) {
        SystemLogger.getLogger(getClass().getSimpleName()).error(null, ex);
    }
}

primefaces组件

代码语言:javascript
运行
复制
    <p:fileUpload label="#{TalentMessages.lbl_Select_File}" fileUploadListener="#{talentPropertyAction.upload}"
                                  mode="advanced"
                                  multiple="true"
                                  uploadLabel="#{TalentMessages.lbl_upload_File}"
                                  cancelLabel="#{TalentMessages.lbl_cancel_File}"
                                  sizeLimit="2000000"
                                  oncomplete="completeUploadFile(#{talentPropertyAction.talentId});"
                                  />

然后是save函数

代码语言:javascript
运行
复制
    @Setter
@Getter
private List<SystemFile> systemFiles;
try {
 // save something else then save the files
        if (systemFiles != null) {
            System.out.println("Not Null" + systemFiles);
            for (SystemFile systemFile : systemFiles) {
                TalentPropertyFile talentPropertyFile = new TalentPropertyFile();
                talentPropertyFile.setTalentProperty(talentProperty);
                talentPropertyFile.setFile(systemFile);
                getTalentService().save(getActor().getAccount(), talentPropertyFile);
            }
        } else {
            System.out.println("Null");
        }
    } catch (InvalidParameter ex) {
        SystemLogger.getLogger(getClass().getName()).error(null, ex);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 19:35:43

那么,如何才能在不使manged bean View作用域的情况下获得上传的文件呢?

只需将上传信息立即存储在一个更持久的位置,而不是将其作为请求作用域bean的属性,请求-响应的末尾无论如何都会对其进行清理(注意:每次上传都被视为一个单独的HTTP请求)。

代码语言:javascript
运行
复制
public void upload(FileUploadEvent event) {
    // Now, store on disk or in DB immediately. Do not assign to a property.
}

public void save() {
    // Later, during submitting the form, just access them from there.
}

如果需要一些键来访问它们,请考虑将键存储在会话作用域中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12913324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档