PrimeFaces 4.0 FileUpload działa z Mojarra 2.2, ale nie z MyFaces 2.2

Mam ciekawy problem z końcowym elementem FileFpload 4.0 PrimeFaces. Próbuję uruchomić:

PrimeFaces 4.0 finalApache MyFaces 2.2.0-betaTomcat 7.0.27

Mam teraz bardzo prostą konfigurację

Strona 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"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<h:form>
    <p:fileUpload
        fileUploadListener="#{fileUploadController.handleFileUpload}"
        mode="advanced" update="messages" sizeLimit="100000"
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />

    <p:growl id="messages" showDetail="true" />
</h:form>
</h:body>
</html>

Z tym fasolą bazową:

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;

@ManagedBean
@RequestScoped  
public class FileUploadController
{
    public void handleFileUpload(FileUploadEvent event)
    {
        FacesMessage msg = new FacesMessage("Succesful", event.getFile()
                .getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

Podczas wybierania pliku i przesyłania go nic się nie dzieje.

Przesyłanie przesyła się pomyślnie z następującą odpowiedzią:

<?xml version="1.0" encoding="UTF-8"?><partial-response><changes><update id="j_id__v_0:javax.faces.ViewState:1"><![CDATA[2C7ZmtwSmrlbgI/wJLI2CLBaMOQP9R/pYkIXpHlXkhSKIhtfFM0sx0HmL8o9MQY2MdHXg4t1vUjJbUYkAdFBmOQUaFy7hFhPr34Za4hOuLW4CPNx]]></update></changes></partial-response>

ale żadna wiadomość nie jest wyświetlana, a jeśli ustawię punkt przerwania, nie zostanie on trafiony.

Jeśli jednak wyciągnę MyFaces 2.2.0-beta i umieścisz Mojarra 2.2.0, wszystko działa zgodnie z oczekiwaniami.

Wolałbym nadal używać MyFaces, ponieważ jest to to, czego użyłem w przeszłości, więc jeśli ktoś ma jakieś pomysły na łatę, aby to zadziałało, byłoby to bardzo mile widziane.

Dziękuję Ci

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"
    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>UploadTest</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</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>*.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>
    <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>
<listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
<!--        <listener-class>com.sun.faces.config.ConfigureListener</listener-class> -->
</listener>

Aktualizacja

Wydaje się, że Myfaces 2.2.0-beta ma problemy z używaniem API Part obecnego w serwletie 3.x.

pulipati udaykiran ma część rozwiązania z wykorzystaniem webweb.xml Filtry wymagane przez PrimeFaces 3.x i pliki do pobrania z plików wspólnych i pliki jonów io, musimy jednak dodać następujący parametr kontekstowy doweb.xml lub filtry zostaną zignorowane:

<context-param>
  <param-name>primefaces.UPLOADER</param-name>
  <param-value>commons</param-value>
</context-param>

To zmusi PrimeFaces do korzystania z biblioteki commons, która rozwiązuje problem

Mimo to chciałbym wiedzieć, dlaczego MyFaces nie może używać API części serwletu, jeśli ktoś ma jakieś pomysły. Podejrzewam, że może to mieć związek z moją wersją Tomcat, ponieważ mam tylko 7.0.27, ale wątpię w to.

questionAnswers(3)

yourAnswerToTheQuestion