primefaces5jsf2多次上传e扫描元素



大家好,我在PrimeFaces/Jsf2 中上传更多文件有问题

我明白了http://www.primefaces.org/showcase/ui/file/upload/multiple.xhtml

当方法拦截相关事件时,我设置

UploadedFile fileUpload=event.getFile();

我想扫描与列表实现上传的每个文件

    InputStream input;
    input = event.getFile().getInputstream();
    pojo.setFileInputStream(input);
    input.close();
    fileTableList.add(pojo);

但最大的问题是这个列表只包含一个上传的文件。如何获取从UploadedFile事件上传的每个文件?

怎么了?感谢您的回答

但最大的问题是这个列表只包含一个文件已上载。如何获取从UploadedFile上传的每个文件事件

除非您明确表示使用最小可复制示例,否则这无法用具有最小可能依赖项/资源的最小示例来复制。


创建一个如下所示的实用程序类(该类完全依赖于需求)。

public class FileUtil implements Serializable {
    private InputStream inputStream; // One can also use byte[] or something else.
    private String fileName;
    private static final long serialVersionUID = 1L;
    public FileUtil() {}
    // Overloaded constructor(s) + getters + setters + hashcode() + equals() + toString().
}

托管bean接收多个文件:

@Named
@ViewScoped
public class TestBean implements Serializable {
    private List<FileUtil> fileList;
    private static final long serialVersionUID = 1L;
    public TestBean() {}
    @PostConstruct
    public void init() {
        fileList = new ArrayList<>();
    }
    public void fileUploadListener(FileUploadEvent event) throws IOException {
        UploadedFile file = event.getFile();
        FileUtil fileUtil = new FileUtil();
        fileUtil.setInputStream(file.getInputstream());
        fileUtil.setFileName(file.getFileName());
        fileList.add(fileUtil);
    }

    // Bound to a <p:commandButton>.
    public void action() {
        for (FileUtil fileUtil : fileList) {
            System.out.println(fileUtil.getFileName());
        }
        // Use the list of files here and clear the list afterwards, if needed.
        fileList.clear();
    }
}

XHTML文件只包含<p:fileUpload><p:commandButton>,只是为了演示。

<h:form id="form">
    <p:fileUpload id="fileUpload"
                  mode="advanced"
                  fileLimit="5"
                  multiple="true"
                  allowTypes="/(.|/)(gif|jpe?g|png)$/"
                  sequential="true"
                  process="@this"
                  fileUploadListener="#{testBean.fileUploadListener}">
    </p:fileUpload>
    <p:commandButton value="Submit"
                     process="@this"
                     update="fileUpload"
                     actionListener="#{testBean.action}"/>
</h:form>

如果您需要byte[]来代替InputStream,那么只需将FileUtil类中的private InputStream inputStream;更改为byte[],然后使用

byte[] bytes = IOUtils.toByteArray(uploadedFile.getInputstream());

InputStream中提取一个字节数组(其中IOUtils来自org.apache.commons.io。您也可以通过编写几行代码手动完成)。

您也可以在不创建像本例中的FileUtil这样的附加类的情况下构造List<UploadedFile>,但如果您碰巧在应用程序中使用了服务层,那么这样做将强制PrimeFaces依赖于服务层(这不应该发生),因为UploadedFile是PrimeFace工件。毕竟,这完全取决于需求。

相关内容

  • 没有找到相关文章

最新更新