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