gpt4 book ai didi

java - 为什么这个简单的文件上传不起作用? JSF

转载 作者:行者123 更新时间:2023-12-04 06:52:41 25 4
gpt4 key购买 nike

为什么这段代码不起作用?每当我上传文件时,我总是得到 size() = 0。

xhtml 文件:-

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html">
<h:head>
<title>Abc</title>

</h:head>
<h:body>
<center>

<form method="post" enctype="multipart/form-data" id="form" action="/upload/uploadFile">
<input type="file"/> <br/>
<input type="Submit" value="upload"/>
</form>

</center>
</h:body>
</html>

这是我的 servlet:-
package servlets;

import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


@WebServlet(name="uploadFile", urlPatterns={"/uploadFile"})
public class uploadFile extends HttpServlet {


protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, FileUploadException {
System.out.println("executed!");
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
System.out.println(items.size());
for (FileItem item : items) {
if (!item.isFormField()) {
System.out.println("Name: " + item.getName());
System.out.println("Size: " + item.getSize());
System.out.println("Type: " + item.getContentType());
}
}
}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (FileUploadException ex) {
ex.printStackTrace();
}
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (FileUploadException ex) {
ex.printStackTrace();
}
}


@Override
public String getServletInfo() {
return "Short description";
}

}

更新:

1)如果我只是将 name = "something"添加到 input type = "file" ,然后它工作正常。这背后有什么逻辑?

2)如果我使用 h:form 而不是 form,那么它就不起作用(即使我的 actionListener 方法也不会被执行)。这背后有什么原因?我读到 h:form 并非旨在处理多部分/表单数据请求。这是真的吗?

最佳答案

我看到您正在使用 Servlet 3.0。它在 HttpServletRequest#getParts() 背后采用了 Commons FileUpload方法。您可以阅读 here你应该如何使用它。

由于 JSF 2.0 更容易创建自定义组件,而 Tomahawk 还没有准备好 JSF 2.0(您通常会选择 t:inputFileUpload 来拥有一个 JSF 文件上传组件),您也可以考虑自己创建一个自定义文件上传组件。这在 this article 中有详细概述.

也就是说,HTML <center>元素是 已弃用 从 1998 年开始。你想使用 CSS 样式 margin: 0 auto;而是在包含块元素上。

关于java - 为什么这个简单的文件上传不起作用? JSF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com