我已经在这篇文章中解决了一些其他问题(fileuploadhandler正在运行),我的代码如下:
豆:
- @ManagedBean
- @ViewScoped
- public class TempBean implements Serializable{
- private static final long serialVersionUID = -70753689043016662L;
- private List<String> names; //to remember which files have been uploaded
- public void load(){
- System.out.println("@prerender");
- }
- public TempBean() {
- super();
- System.out.println("@constructor");
- names = new ArrayList<String>();
- }
- @PostConstruct
- public void pc(){
- System.out.println("@postconstruct");
- }
- public void handleFileUpload(FileUploadEvent event) {
- String filename = event.getFile().getFileName();
- System.out.println("INCOMING FILE: " + filename);
- names.add(filename);
- if(!names.isEmpty()){
- System.out.println("Files uploaded:");
- for(String n : names){
- System.out.println("# " + n);
- }
- System.out.println();
- }
- }
- public List<String> getNames() {
- return names;
- }
- public void setNames(List<String> names) {
- this.names = names;
- }
- }
XHTML页面:
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:p="http://primefaces.org/ui" >
- <h:head>
- <Meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- </h:head>
- <f:event type="preRenderView" listener="#{tempBean.load}" />
- <h:body>
- <h:form>
- <p:fileUpload
- fileUploadListener="#{tempBean.handleFileUpload}"
- mode="advanced" dragDropSupport="true" multiple="true" update=":overview" />
- </h:form>
- <h:panelGroup id="overview">
- <ui:repeat var="file" value="#{tempBean.names}">
- #{file} <br/>
- </ui:repeat>
- </h:panelGroup>
- </h:body>
- </html>
我现在面临的问题(或者我打开一个新问题的原因)是,当我上传多个(例如三个)文件时,其中只有一个被附加到空列表中.当我重新上载剩下的两个文件时,再次只将其中一个文件附加到列表中.
有趣的是,为每个文件调用handleFileUpload(…)…
- @constructor
- @postconstruct
- @prerender
- INCOMING FILE: test1.jpe
- INCOMING FILE: test3.jpe
- Files uploaded:
- INCOMING FILE: test2.jpe
- # test3.jpe
- -END OF LIST-
- Files uploaded:
- # test1.jpe
- Files uploaded:
- # test2.jpe
- -END OF LIST-
- -END OF LIST-
- @prerender
- @prerender
- @prerender
我该怎么做才能使fileupload-component正常运行?这是一个bug还是一个ajax问题?
这是我的web.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- id="WebApp_ID" version="3.0" >
- <display-name>TestProjekt</display-name>
- <welcome-file-list>
- <welcome-file>test.xhtml</welcome-file>
- </welcome-file-list>
- <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>
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>*.jsf</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>*.faces</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>*.xhtml</url-pattern>
- </servlet-mapping>
- <context-param>
- <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
- <param-value>resources.application</param-value>
- </context-param>
- <context-param>
- <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
- <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
- <param-value>client</param-value>
- </context-param>
- <context-param>
- <param-name>facelets.SKIP_COMMENTS</param-name>
- <param-value>true</param-value>
- </context-param>
- <context-param>
- <param-name>primefaces.UPLOADER</param-name>
- <param-value>commons</param-value>
- </context-param>
- <context-param>
- <description>
- This parameter tells MyFaces if javascript code should be allowed in
- the rendered HTML output.
- If javascript is allowed,command_link anchors will have javascript code
- that submits the corresponding form.
- If javascript is not allowed,the state saving info and nested parameters
- will be added as url parameters.
- Default is 'true'</description>
- <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
- <param-value>true</param-value>
- </context-param>
- <context-param>
- <description>
- If true,rendered HTML code will be formatted,so that it is 'human-readable'
- i.e. additional line separators and whitespace will be written,that do not
- influence the HTML code.
- Default is 'true'</description>
- <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
- <param-value>true</param-value>
- </context-param>
- <context-param>
- <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
- <param-value>false</param-value>
- </context-param>
- <context-param>
- <description>
- If true,a javascript function will be rendered that is able to restore the
- former vertical scroll on every request. Convenient feature if you have pages
- with long lists and you do not want the browser page to always jump to the top
- if you trigger a link or button action that stays on the same page.
- Default is 'false'
- </description>
- <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
- <param-value>true</param-value>
- </context-param>
- <filter>
- <filter-name>PrimeFaces FileUpload Filter</filter-name>
- <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
- <init-param>
- <param-name>uploadDirectory</param-name>
- <param-value>C:\tmp</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>PrimeFaces FileUpload Filter</filter-name>
- <servlet-name>Faces Servlet</servlet-name>
- </filter-mapping>
- </web-app>
和我的faces.config:
- <?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">
- </faces-config>
这是由您的JSF实现MyFaces 2.2.0-20130426中的错误引起的.
当我尝试MyFaces 2.2.0-beta(目前可用于myfaces.apache.org)和Mojarra 2.2.4(目前可用作javaserverfaces.java.net)时,它适用于我.
正如对该问题的评论所证实,它也适用于您.