添加 PrettyFaces 后,Primefaces 文件上传停止工作
Primefaces File Upload Stop Working After I have added PrettyFaces
首先,我使用的技术Primefaces 6.1
、PrettyFaces 3.3.3
和Wildfly 11
。我只是想使用 Primefaces 将文件上传到我的数据库
<p:fileUpload>
组件。这是我使用的代码片段。
<h:form>
<p:fileUpload fileUploadListener="#{imageopbean.uploadImage}" mode="advanced" auto="true" style="display:none;" oncomplete="uppicture()" styleClass="imageUploadButton" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" >
<f:attribute name="uniqueid" value="#{profileBean.theUser.userId}"/>
</p:fileUpload>
</h:form>
在我使用 PrettyFaces 库之前它就可以工作了。现在,它不会调用 fileUploadListener
。我已阅读 this 问题和其他一些解决方案。但我不能让他们工作。我究竟做错了什么?这是我的代码的其他部分。谢谢。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>primefaces.FONT_AWESOME</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>extranet</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
<param-value>2048576</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>2</param-value>
</context-param>
<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>*.xhtml</url-pattern>
</servlet-mapping>
<filter>
<filter-name>primeFacesFileUploadFilter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>primeFacesFileUploadFilter</filter-name>
<servlet-name>facesServlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern />
</filter-mapping>
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>
<session-config>
<session-timeout>
60
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>login.xhtml</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error-404.xhtml</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/login</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/login</location>
</error-page>
</web-app>
ImageBean.java
@Named("imageopbean")
@RequestScoped
public class ImageBean implements Serializable {
@EJB
private ImageManager imageManager;
/**
*
* @param event
*/
public void uploadImage(FileUploadEvent event) {
System.out.println("UPLOAD WORK");
....
}
}
我已经尝试了 web.xml 中的大部分过滤器组合,但没有任何效果。
我找到了这个,
并且我删除了我在 web.xml
和 pom.xml
中插入的所有内容。
再次给出解决方案:
1- 添加 enctype="multipart/form-data"
到您的 <h:fom>
标签
2- 根据您的 JSF 页面编辑脚本
<script type="text/javascript">
$(document).ready(function() {
$("form[enctype='multipart/form-data']").attr("action","#{request.contextPath}/test/fileupload.xhtml");
});
</script>
就这些了..
首先,我使用的技术Primefaces 6.1
、PrettyFaces 3.3.3
和Wildfly 11
。我只是想使用 Primefaces 将文件上传到我的数据库
<p:fileUpload>
组件。这是我使用的代码片段。
<h:form>
<p:fileUpload fileUploadListener="#{imageopbean.uploadImage}" mode="advanced" auto="true" style="display:none;" oncomplete="uppicture()" styleClass="imageUploadButton" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" >
<f:attribute name="uniqueid" value="#{profileBean.theUser.userId}"/>
</p:fileUpload>
</h:form>
在我使用 PrettyFaces 库之前它就可以工作了。现在,它不会调用 fileUploadListener
。我已阅读 this 问题和其他一些解决方案。但我不能让他们工作。我究竟做错了什么?这是我的代码的其他部分。谢谢。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>primefaces.FONT_AWESOME</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>extranet</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
<param-value>2048576</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>2</param-value>
</context-param>
<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>*.xhtml</url-pattern>
</servlet-mapping>
<filter>
<filter-name>primeFacesFileUploadFilter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>primeFacesFileUploadFilter</filter-name>
<servlet-name>facesServlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern />
</filter-mapping>
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>
<session-config>
<session-timeout>
60
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>login.xhtml</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error-404.xhtml</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/login</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/login</location>
</error-page>
</web-app>
ImageBean.java
@Named("imageopbean")
@RequestScoped
public class ImageBean implements Serializable {
@EJB
private ImageManager imageManager;
/**
*
* @param event
*/
public void uploadImage(FileUploadEvent event) {
System.out.println("UPLOAD WORK");
....
}
}
我已经尝试了 web.xml 中的大部分过滤器组合,但没有任何效果。 我找到了这个,
并且我删除了我在 web.xml
和 pom.xml
中插入的所有内容。
再次给出解决方案:
1- 添加 enctype="multipart/form-data"
到您的 <h:fom>
标签
2- 根据您的 JSF 页面编辑脚本
<script type="text/javascript">
$(document).ready(function() {
$("form[enctype='multipart/form-data']").attr("action","#{request.contextPath}/test/fileupload.xhtml");
});
</script>
就这些了..