如何使用jsf导入目录中的文件

时间:2016-03-28 11:20:22

标签: java jsf import

大家好我是Java开发新手,我对此感到很困惑。 我正在做一个Web应用程序,我的问题是如何导入文件并将其放在i目录中。我创建了xhtml文件:

    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:jsf="http://xmlns.jcp.org/jsf"
    xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
    xmlns:p="http://primefaces.org/ui"
    template="/WEB-INF/template/template.xhtml">
<ui:define name="title">2G</ui:define>


    <ui:define name="content">
    <h:form>

    <h1> <font color="orange" size="7" > 2G</font></h1> 


    </h:form>
    <h2 >Choose 2 files </h2>
    <h:form>
            <p:fileUpload fileUploadListener="#{import_2G.save()}"
                mode="advanced" dragDropSupport="true" update="messages"
                sizeLimit="100000000000" allowTypes="/(\.|\/)(xls)$/" />

            <p:growl id="messages" showDetail="true" />
        </h:form>

</ui:define>
</ui:composition>

这是bean文件:

    @ManagedBean
@RequestScoped
public class Import_2G {
    public Import_2G() { }
    @EJB
    private GestionCellRef2GLocal gestionCellRef2GLocal;

    private UploadedFile uploadedFile;

    public void save() throws IOException {
        GestionCellRef2GRemote t = null;


            Path folder = Paths.get("C:\\Upload");
            String filename = FilenameUtils.getBaseName(uploadedFile.getFileName());
            String extension = FilenameUtils.getExtension(uploadedFile.getFileName());
            Path file = Files.createTempFile(folder, filename + "-", "." + extension);
            if (file != null) {
                FacesMessage message = new FacesMessage("Succesful", file.getFileName() + " was uploaded.");
                FacesContext.getCurrentInstance().addMessage(null, message);
            }

            try (InputStream input = uploadedFile.getInputstream()) {
                Files.copy(input, folder, StandardCopyOption.REPLACE_EXISTING);


    }
    }

}

任何帮助人员?

1 个答案:

答案 0 :(得分:1)

首先开始阅读Java中的命名约定。如果你不尊重命名惯例并使用下划线,分数和类似的东西,你将遇到一些麻烦。

其次,你忘记了enctype。当您想要上传二进制数据时,您必须放置属性:enctype="multipart/form-data&#34;。让我们构建文件上传。

首先是你的表格:

<h:form enctype="multipart/form-data">
    <p:fileUpload value="#{import2G.file}"
                  mode="advanced" dragDropSupport="true"
          sizeLimit="100000000"
          allowTypes="/(\.|\/)(xls)$/"
          update="messages"
          fileUploadListener="#{import2G.save}" />
</h:form>

<p:growl id="messages" showDetail="true" />

你的支持豆:

public void save(FileUploadEvent e) {
    FileUpload file = event.getFile();
    String fileName = file.getFileName();
    String contentType = file.getContentType();
    byte[] content = file.getContents();
    saveFile(content);
}

private void saveFile(byte[] data) {
    FileOutputStream fos = new FileOutputStream(DIR_NAME);
    fos.write(data);
    fos.close();
}

查看表单中的监听器;使用import2G.save代替import2G.save(),这是因为在运行时将FileUpload parameter传递给侦听器。