Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MyFaces Tomahawk+JSF 2.0上传文件_Java_Jsf_Jpa_File Upload_Jakarta Ee - Fatal编程技术网

Java 使用MyFaces Tomahawk+JSF 2.0上传文件

Java 使用MyFaces Tomahawk+JSF 2.0上传文件,java,jsf,jpa,file-upload,jakarta-ee,Java,Jsf,Jpa,File Upload,Jakarta Ee,我目前正在使用Tomahawk MyFaces将文件上载到我的服务器。我一步一步地遵循一些说明,看起来一切正常,但我没有将文件持久化到数据库中。我没有看到任何错误,我只是在eclipse控制台中看到一些警告。有人能看一下吗?这就是我所做的: 1下载了Tomahawk for JSF 2.0,并将所有的.jar添加到我的WEB-INF/lib文件夹中 2-我检查了我的web.xml是否正确配置为使用Facesservlet。我还为tomahawks extensions添加了一个过滤器,它看起来是

我目前正在使用Tomahawk MyFaces将文件上载到我的服务器。我一步一步地遵循一些说明,看起来一切正常,但我没有将文件持久化到数据库中。我没有看到任何错误,我只是在eclipse控制台中看到一些警告。有人能看一下吗?这就是我所做的:

1下载了Tomahawk for JSF 2.0,并将所有的.jar添加到我的WEB-INF/lib文件夹中

2-我检查了我的web.xml是否正确配置为使用Facesservlet。我还为tomahawks extensions添加了一个过滤器,它看起来是这样的:

<web-app version="3.0" 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">

<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>/pages/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>pages/index.jsp</welcome-file>
</welcome-file-list>
    <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>
注意:托管bean调用一个EJB,该EJB应该保存到数据库文件中

6-允许访问数据库的EJB:

    @Stateless(name = "ejbs/FileUploaderEJB")
    public class FileUploaderEJB implements IFileUploaderEJB {
@PersistenceContext
private EntityManager em;


public Garbage uploadGarbage(Garbage garbage) {
    Date date = new Date();
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");        

    garbage.setUploadDate(dateFormat.format(date));     
    //...

    em.persist(garbage);

    return garbage;
}
    @Entity
    public class Garbage {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String filename;
@Column(nullable = false)
private String fileType;
@Column(nullable = false)
private String uploadDate;
@Column(nullable = false)
private String destroyDate;
@Lob
@Column(nullable = false)
private byte[] file;
@Column(nullable = false)
private String description;
    //Getters and Setters...
7-最后,我有一个使用JPA注释的实体,它使用@Lob将文件存储在数据库中:

    @Stateless(name = "ejbs/FileUploaderEJB")
    public class FileUploaderEJB implements IFileUploaderEJB {
@PersistenceContext
private EntityManager em;


public Garbage uploadGarbage(Garbage garbage) {
    Date date = new Date();
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");        

    garbage.setUploadDate(dateFormat.format(date));     
    //...

    em.persist(garbage);

    return garbage;
}
    @Entity
    public class Garbage {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String filename;
@Column(nullable = false)
private String fileType;
@Column(nullable = false)
private String uploadDate;
@Column(nullable = false)
private String destroyDate;
@Lob
@Column(nullable = false)
private byte[] file;
@Column(nullable = false)
private String description;
    //Getters and Setters...
问题有三:

P1-当我用浏览按钮选择一个文件,然后单击提交时,不会发生任何事情。我在控制台中没有看到任何输入查询,没有向数据库添加新行。我错过了什么

P2-每当我对源代码进行更改并再次发布控制台时,它都会比平时花费更长的时间来构建近40秒,并且它会向我显示大量类似这样的警告20多多少少:

警告:JSF1029:应用程序的版本为2.0,可能是由/WEB-INF/faces-config.xml版本显式控制的,也可能是由于缺少/WEB-INF/faces-confg.xml,但是类“org.ajax4jsf.taglib.html.facelets.AjaxSupportHandler”依赖于旧的facelet类。此类表示的facelet工件将不会注册

jar文件或faces-config.xml上的配置是否有问题

P3-当我使用浏览器导航到项目中的任何页面时,会出现如下警告:

警告:PWC4011:无法从上下文/数据池将请求字符编码设置为UTF-8,因为已读取请求参数,或已调用ServletRequest.getReader

我认为这与web.xml上的过滤器有关

当我用“浏览”按钮选择一个文件,然后单击“提交”时,不会发生任何事情

您缺少enctype=multipart/form数据属性。检查此处的迷你教程:

警告:JSF1029:应用程序的版本为2.0,可能是由/WEB-INF/faces-config.xml版本显式控制的,也可能是由于缺少/WEB-INF/faces-confg.xml,但是类“org.ajax4jsf.taglib.html.facelets.AjaxSupportHandler”依赖于旧的facelet类。此类表示的facelet工件将不会注册

您的web项目中仍然有一些面向JSF1.2的RichFaces/A4J库。如果你不需要,就把它们扔掉

警告:PWC4011:无法从上下文/数据池将请求字符编码设置为UTF-8,因为已读取请求参数,或已调用ServletRequest.getReader


这是玻璃鱼特有的。Glassfish默认为ISO-8859-1,需要重新配置以使用UTF-8。另请参见

是的,它不见了。我现在更新下面的代码。但我收到一个HTTP状态500,上面写着:警告:StandardWrapperValve[Faces Servlet]:PWC1406:Servlet.service for Servlet Faces Servlet引发异常java.lang.NullPointerException:参数错误:参数viewId为Null请首先从/WEB-INF/lib清除所有旧的RichFaces/Ajax4jsf/JSF/Facelets库。这是包含不兼容版本的Facelet ViewHandler的库的类路径污染的迹象。我之前关于如何集成文件上传的回答要求一个全新且干净的web项目,而不是一个已被污染的现有项目。lib文件夹中根本没有来自richfaces的JAR,而且我刚刚从eclipse重新构建了一个项目,但仍然看到警告JSF1029。哪里还有污染?检查整个类路径。检查Eclipse项目属性中的部署程序集。检查磁盘上的/JRE/lib和/JRE/lib/ext文件夹。检查Glassfish/lib文件夹等。我建议创建一个全新的项目,完全按照我之前的回答所述,只是为了确定。这样你可以在它的基础上进一步发展。过了一段时间,我决定创建一个新的清洁项目。P2和P3已求解。但当我单击submit时,P1仍然给我一个错误HTTP500。我将发布带有堆栈跟踪的第二条注释
    @Entity
    public class Garbage {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String filename;
@Column(nullable = false)
private String fileType;
@Column(nullable = false)
private String uploadDate;
@Column(nullable = false)
private String destroyDate;
@Lob
@Column(nullable = false)
private byte[] file;
@Column(nullable = false)
private String description;
    //Getters and Setters...