File JSF2.0文件上传-演练?

File JSF2.0文件上传-演练?,file,jsf,upload,File,Jsf,Upload,我已经四处寻找了一段时间,寻找一个完整的指南。我使用JSF已经有2天了,我正在尝试制作一个页面,将pdf文件上传到服务器,将其文件路径与其他用户输入的文本字段一起放入数据库 这是我的表格(到目前为止) web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/200

我已经四处寻找了一段时间,寻找一个完整的指南。我使用JSF已经有2天了,我正在尝试制作一个页面,将pdf文件上传到服务器,将其文件路径与其他用户输入的文本字段一起放入数据库

这是我的表格(到目前为止)

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="timesheet2" version="3.0">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>faces/login.xhtml</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
  </listener> 
  <filter>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
  </filter-mapping>
</web-app>

faces/login.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
/面孔/*
com.sun.faces.config.ConfigureListener
MyFaceXtensionsFilter
org.apache.myfaces.webapp.filter.ExtensionsFilter
MyFaceXtensionsFilter
Facesservlet
但从这里我不知道如何继续,请帮忙?
提前感谢

我可以推荐吗?

我可以推荐吗?

BalusC发表了一篇博客文章,介绍了如何为JSF 2.0和2.1构建一个基于纯JSF的自定义标记组件。自JSF 2.2以来,有一个用于文件上传的JSF组件:


此外,您还可以看到另一个实现,如and。

BalusC通过构建一个定制标记组件(针对JSF2.0和2.1的纯JSF)发表了一篇博文。自JSF 2.2以来,有一个用于文件上传的JSF组件:


另外,您还可以查看其他实现,如和。

看看本文(使用JSF2.0和Servlet3.0上传文件),您已经有了相当完整的代码。你到底在努力解决什么问题?您不知道如何在本地磁盘文件系统或数据库上保存文件字节?这与在JSF中上传文件无关。看看这篇文章(使用JSF2.0和Servlet3.0上传文件),您已经有了相当完整的代码。你到底在努力解决什么问题?您不知道如何在本地磁盘文件系统或数据库上保存文件字节?这与在JSF中上传文件无关。注释不允许提供链接。它们也应该是建设性的…:-)我不知道一个好的答案,这也是一个问题。是的,你可以在评论中发布链接,就像@Daniel所做的一样。谢谢,我刚刚注意到了这一点。我还注意到你的答案是丹尼尔和我的…-)还有富有的面孔!别忘了,我也在丹尼尔评论的同时发布了我的答案。为什么我的答案是这样的?因为巴卢斯克对这个问题有很好的解释,所以不需要在一个好的答案中添加任何信息。@Luiggi Mendoza:听说过反问吗?(此评论可能是,也可能不是一个例子。)评论不允许提供链接。它们也应该是建设性的…:-)我不知道一个好的答案,这也是一个问题。是的,你可以在评论中发布链接,就像@Daniel所做的一样。谢谢,我刚刚注意到了这一点。我还注意到你的答案是丹尼尔和我的…-)还有富有的面孔!别忘了,我也在丹尼尔评论的同时发布了我的答案。为什么我的答案是这样的?因为巴卢斯克对这个问题有很好的解释,所以不需要在一个好的答案中添加任何信息。@Luiggi Mendoza:听说过反问吗?(此评论可能是,也可能不是一个例子。)博客的帖子是过时的内容。这是尽可能快的!)谢谢(我也可以更新答案,但不管怎样,它是你的。)博客的帖子已经过时了。这是尽可能快的!)谢谢(我也可以更新答案,但无论如何,它是你的。)
   package com.example;

import java.io.IOException;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.apache.commons.io.FilenameUtils;
import org.apache.myfaces.custom.fileupload.UploadedFile;

@ManagedBean
@RequestScoped
public class Bean {

    private String name, position, date;
    private String fileName;
    private UploadedFile resume;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setResume(UploadedFile resume) {
        this.fileName = resume.getName();
        this.resume = resume;
    }

    public UploadedFile getResume() {
        return resume;
    }

    public String getFileName() {
        return fileName;
    }

    public void submit() throws IOException {
        String fileName = FilenameUtils.getName(resume.getName());
        String contentType = resume.getContentType();
        byte[] bytes = resume.getBytes();

        // Now you can save bytes in DB (and also content type?)

        FacesContext.getCurrentInstance().addMessage(null, 
            new FacesMessage(String.format("File '%s' of type '%s' successfully uploaded!", fileName, contentType)));
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="timesheet2" version="3.0">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>faces/login.xhtml</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
  </listener> 
  <filter>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFacesExtensionsFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
  </filter-mapping>
</web-app>