- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在使用 Tomahawk MyFaces 将文件上传到我的服务器。我一步一步地按照一些说明进行操作,一切似乎都很好,但我没有将文件保存到数据库中。我没有看到任何错误,我只是在我的 eclipse 控制台中看到一些警告。有人可以看看吗?这就是我所做的:
1-为 JSF 2.0 下载 Tomahawk 并将所有 .jars 添加到我的 WEB-INF/lib 文件夹
2-我检查了我的 web.xml 是否正确配置为使用 Faces Servlet。我还为战斧扩展添加了一个过滤器这就是它的样子:
<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>
3-我还检查了我的 faces-config.xml 是否正确:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
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-facesconfig_2_0.xsd"
version="2.0">
4-我为上传小工具创建了一个非常简单的复合页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:t="http://myfaces.apache.org/tomahawk">
<ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
<ui:define name="uploadForm">
<h:form>
<t:inputFileUpload value="#{uploadController.uploadedFile}" />
<h:commandButton value="submit" action="#{uploadController.submit}" />
<h:messages />
</h:form>
</ui:define>
</ui:composition>
</html>
5-我有一个托管 bean 来与页面通信并获取输入的文件:
@ManagedBean
@RequestScoped
public class UploadController {
@EJB
private IFileUploaderEJB fileUploaderEJB;
private UploadedFile uploadedFile;
public void submit() throws IOException {
String fileName = FilenameUtils.getName(uploadedFile.getName());
String contentType = uploadedFile.getContentType();
byte[] bytes = uploadedFile.getBytes();
// Now you can save bytes in DB (and also content type?)
Garbage garbage = new Garbage();
garbage.setFilename(fileName);
garbage.setFile(bytes);
garbage.setDescription("info about the file");
garbage.setFileType("File extension");
fileUploaderEJB.uploadGarbage(garbage);
FacesContext.getCurrentInstance().addMessage(
null,
new FacesMessage(String.format(
"File '%s' of type '%s' successfully uploaded!",
fileName, contentType)));
}
public UploadedFile getUploadedFile() {
return uploadedFile;
}
public void setUploadedFile(UploadedFile uploadedFile) {
this.uploadedFile = uploadedFile;
}}
注意:托管 bean 调用 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;
}
7- 最后我有一个使用 JPA 注释的实体,它使用 @Lob 将文件存储在数据库中:
@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...
问题是3:
P1 - 当我使用浏览按钮选择文件然后单击提交时,没有任何反应。我在控制台中没有看到任何输入查询,没有新行添加到数据库中。我缺少什么?
P2 - 每当我更改我的源代码并再次发布控制台时,构建所需的时间比平时更长(将近 40 秒),并且它会向我显示很多警告,例如这个警告(20或多或少):
WARNING: JSF1029: Application is versioned at 2.0 (either explicitly by the version of /WEB-INF/faces-config.xml or the lack of a /WEB-INF/faces-confg.xml), however class 'org.ajax4jsf.taglib.html.facelets.AjaxSupportHandler' depends on a legacy facelet class. The facelet artifact represented by this class will not be registered.
jar 文件或 faces-config.xml 中的配置有问题吗?
P3 - 当我使用浏览器导航到我的项目中的任何页面时,出现如下警告:
WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /Datapool, because request parameters have already been read, or ServletRequest.getReader() has already been called
我认为这与 web.xml 中的过滤器有关
最佳答案
When i select a file with the browse button and then i click submit nothing happens.
你的 <h:form>
缺少 enctype="multipart/form-data"
属性。在此处查看迷你教程:JSF 2.0 file upload with Tomahawk's <t:inputFileUpload>
.
WARNING: JSF1029: Application is versioned at 2.0 (either explicitly by the version of /WEB-INF/faces-config.xml or the lack of a /WEB-INF/faces-confg.xml), however class 'org.ajax4jsf.taglib.html.facelets.AjaxSupportHandler' depends on a legacy facelet class. The facelet artifact represented by this class will not be registered.
您的 Web 项目中仍然有一些针对 JSF 1.2 的 RichFaces/A4J 库。如果不需要,请摆脱它们。
WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /Datapool, because request parameters have already been read, or ServletRequest.getReader() has already been called
这是 Glassfish 特有的。 Glassfish 默认为 ISO-8859-1,需要重新配置以使用 UTF-8。另见 How to get rid of WARNING: PWC4011: Unable to set request character encoding to UTF-8
关于java - 使用 MyFaces Tomahawk + JSF 2.0 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431512/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!