大佬教程收集整理的这篇文章主要介绍了如果h:form的enctype =“ multipart / form-data”,则h:commandButton不会触发动作,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这里,
for (fileItem item : items) {
if (!item.isFormFIEld()) {
files.add(item);
}
}
您将忽略所有表单字段,例如按钮本身。当继续这样的请求时,JsF将不知道按钮已被调用,因此根本不会排队任何操作。
您需要添加一个,else
以将中的所有表单字段收集@H_902_5@map<String,
String[]>起来,并使用来包装请求,该请求httpServletrequestWrapper
在所有getParameterXxx()
调用中均委托给该映射,最后使用已包装的请求继续过滤链。这样,JsF将发现按钮已被调用,然后排队执行适当的操作。
JSF: 1.2
服务器: Weblogic
我正在尝试实现多个文件上传。由于需要支持IE7,因此无法使用HTML5输入文件。因此,我计划添加一个按钮,单击该按钮将在页面中添加一个输入文件。
首先,我开始使用ADF Faces工作。但这没有用。那表现出意想不到的方式。
我还尝试了Tomahawk的文件上传组件,但是问题在于该组件,从后端添加了新文件上传后,以前创建的文件上传字段为空。不是UploadedFile
实例。但这不能满足我的要求。因为我需要显示文件上传器中的所有路径,直到单击最后一个“提交表单”按钮。
然后,我得到了Apache Commons Fileupload的帮助。
我已经使用纯JSP尝试了此操作,并安装了fileupload,效果很好。
但是我想用apches文件上传来用JSF来实现它,而当我试图这样做时,它开始引起问题。
jspx页面如下:
<?xml version='1.0' encoding='utf-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<jsp:output omit-xml-declaration="true" doctype-root-element="HTML"
doctype-system="http://www.w3.org/TR/html4/loose.dtd"
doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
<jsp:directive.page contentType="text/html;charset=utf-8"/>
<f:view>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8"/>
<title>home</title>
</head>
<body>
<h:form enctype="multipart/form-data">
<input type="file" name="file"/>
<h:commandButton value="Upload" action="#{uploadBean.uploaD}" />
</h:form>
</body>
</html>
</f:view>
</jsp:root>
我创建了一个过滤器,因为无法从action
事件中获取正确的多部分请求。
web.xml是:
<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLscheR_887_11845@a-instance"
xsi:scheR_887_11845@aLOCATIOn="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<filter>
<filter-name>UploadFilter</filter-name>
<filter-class>com.edfx.massupload.filter.UploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UploadFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<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>
<welcome-file-list>
<welcome-file>/home.jspx</welcome-file>
</welcome-file-list>
</web-app>
UploadFilter:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.Servletrequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.httpServletrequest;
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;
public class UploadFilter implements Filter {
private FilterConfig _filterConfig = null;
public void init(FilterConfig filterConfig) throws ServletException {
_filterConfig = filterConfig;
}
public void destroy() {
_filterConfig = null;
}
public void doFilter(Servletrequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
System.out.println("Filter");
if (!(request instanceof httpServletrequest)) {
chain.doFilter(request,responsE);
return;
}
httpServletrequest httprequest = (httpServletrequest)request;
Boolean isMultipartContent = ServletFileUpload.isMultipartContent(httprequest);
if (!isMultipartContent) {
chain.doFilter(request,responsE);
return;
}
long maxFileSize = (1024 * 1024 * 1024);
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(maxFileSizE);
upload.setFileSizeMax(maxFileSizE);
try {
List<FileItem> items = upload.parserequest(httprequest);
System.out.println(items.size());
List<FileItem> files = new ArrayList<FileItem>();
for (FileItem item : items) {
if (!item.isFormField()) {
files.add(item);
}
}
httprequest.setAttribute("files",files);
} catch (FileUploadException eX) {
ex.printStackTrace();
}
chain.doFilter(request,responsE);
}
}
最后是托管bean:
import javax.faces.context.FacesContext;
import javax.servlet.http.httpServletrequest;
public class UploadBean {
public UploadBean() {
super();
}
public String upload() {
System.out.println("====Jym");
httpServletrequest httprequest = (httpServletrequest)FacesContext.getCurrenTinstance().getExternalContext().getrequest();
System.out.println(httprequest.getAttribute("files"));
return "";
}
}
我的目标是通过JavaScript或jQuery动态添加输入文件字段,在JSP中效果很好,我想在JSF中获得它。
如果我enctype="multipart/form-data"
从中删除,h:form
则该action方法正在执行,否则不会执行。
任何建议对我都会很有帮助。
以上是大佬教程为你收集整理的如果h:form的enctype =“ multipart / form-data”,则h:commandButton不会触发动作全部内容,希望文章能够帮你解决如果h:form的enctype =“ multipart / form-data”,则h:commandButton不会触发动作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。