I am wiritng a Portlet for Liferay and need the ace:fileEntry component. I already had some Issues I was finally able to solve. But now I'm facing a problem I can't understand.
When the viewpage where ace:fileEntry is included is openend, after plus minus 90 seconds there will be shown a popup with the message "Network Connection Interrupted" and I have to reload the page. After some research I found the following lines in my browser-console:
[icepush.0086c.async-connection] closing previous connection...
[icepush.0086c.async-connection] connect...
[icepush.0086c.async-connection] empty response received
[icepush.0086c.async-connection] closing previous connection...
[icepush.0086c.async-connection] connect...
[icepush.0086c.async-connection] empty response received
[icepush.0086c.async-connection] closing previous connection...
[icepush.0086c.async-connection] connect...
[icepush.0086c.async-connection] empty response received
[icepush.0086c.async-connection] blocking connection stopped, too many empty responses received...
[icepush.0086c.async-connection] failed to connect, first retry...
[icepush.0086c] connection in trouble
[icepush.0086c.async-connection] closing previous connection...
[icepush.0086c.async-connection] connect...
[icepush.0086c.async-connection] empty response received
[icepush.0086c.async-connection] blocking connection stopped, too many empty responses received...
[icepush.0086c.async-connection] failed to connect, second retry...
[icepush.0086c] connection in trouble
[icepush.0086c.async-connection] closing previous connection...
[icepush.0086c.async-connection] connect...
[icepush.0086c.async-connection] empty response received
[icepush.0086c.async-connection] blocking connection stopped, too many empty responses received...
[icepush.0086c] connection to server was lost
I'm using the following Versions of Liferay and ICEFaces:
My web.xml looks like this:
<?xml version="1.0"?>
<web-app
version="3.0"
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-app_3_0.xsd"
>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Instruct Mojarra to utilize JBoss-EL instead of the EL implementation provided by the servlet container. -->
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
<!-- Instruct ICEfaces to abstain from adding a random query parameter to resource URLs (which it does by default -->
<!-- in order to prevent caching of JavaScript resources like bridge.js in a servlet-based webapp). -->
<context-param>
<param-name>org.icefaces.uniqueResourceURLs</param-name>
<param-value>false</param-value>
</context-param>
<!-- Production wegen Test ob bestimmte Messages verschwinden -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
<context-param>
<param-name>com.icesoft.faces.concurrentDOMViews</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.icefaces.mandatoryResourceConfiguration</param-name>
<param-value>dataTable richTextEntry fileEntry</param-value>
</context-param>
<!-- Although the FacesServlet will not be invoked by any portlet requests, it is required to initialize JSF. -->
<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>/icefaces/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>mail/MailSession</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
My face-config.xml looks like this:
<?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">
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
<lifecycle>
<phase-listener>com.liferay.faces.util.lifecycle.DebugPhaseListener</phase-listener>
<phase-listener>com.liferay.faces.util.lifecycle.ViewScopePhaseListener</phase-listener>
</lifecycle>
<navigation-rule>
<from-view-id>/views/*</from-view-id>
<navigation-case>
<from-outcome>warenkorb</from-outcome>
<to-view-id>/views/warenkorb.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>checkout</from-outcome>
<to-view-id>/views/bestellprozess.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>bestelluebersicht</from-outcome>
<to-view-id>/views/bestelluebersicht.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<to-view-id>/views/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/adminviews/*</from-view-id>
<navigation-case>
<from-outcome>neueKategorie</from-outcome>
<to-view-id>/adminviews/neueKategorie.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>verwaltungKategorie</from-outcome>
<to-view-id>/adminviews/verwaltungKategorie.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>neuerArtikel</from-outcome>
<to-view-id>/adminviews/neuerArtikel.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>absenderMail</from-outcome>
<to-view-id>/adminviews/absenderMail.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>bestaetigungsMail</from-outcome>
<to-view-id>/adminviews/bestaetigungsMail.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<to-view-id>/adminviews/index.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
My viewpage.xhtml where ace:fileEntry is placed looks like this:
<?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:ace="http://www.icefaces.org/icefaces/components"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<ui:composition template="/adminviews/index.xhtml">
<ui:define name="content">
<ace:panel header="Neuen Artikel anlegen">
<ice:form>
<ace:textEntry id="artikelnr"
label="Artikelnummer:"
labelPosition="left"
required="true"
requiredMessage="required"
value="#{addingBean.newArtikel.artikelnummer}">
</ace:textEntry>
<br />
<ace:textEntry id="bezeichnung"
label="Bezeichnung:"
labelPosition="left"
required="true"
requiredMessage="required"
value="#{addingBean.newArtikel.bezeichnung}">
</ace:textEntry>
<br />
<ace:textEntry id="preis"
label="Einzelpreis (netto):"
labelPosition="left"
required="true"
requiredMessage="required"
value="#{addingBean.newArtikel.preis1}">
</ace:textEntry>
<br />
<ace:textEntry id="bestand"
label="Bestand:"
labelPosition="left"
required="true"
requiredMessage="required"
value="#{addingBean.newArtikel.bestand}">
</ace:textEntry>
<br />
<ace:textAreaEntry id="beschreibung"
label="Beschreibung:"
labelPosition="left"
value="#{addingBean.newArtikel.beschreibung}">
</ace:textAreaEntry>
<br />
<ace:simpleSelectOneMenu label="Steuerschlüssel:"
labelPosition="left"
value="#{addingBean.steuerId}"
required="true">
<f:selectItem itemValue="" itemLabel="bitte auswählen ..." />
<f:selectItems value="#{requestBean.allSteuerItems}"/>
</ace:simpleSelectOneMenu>
<br />
<ace:simpleSelectOneMenu label="Kategorie:"
labelPosition="left"
value="#{addingBean.kategorieId}">
<f:selectItem itemValue="null" itemLabel="keine Kategorie" />
<f:selectItems value="#{requestBean.allKategorieItems}" />
</ace:simpleSelectOneMenu>
<br />
<ice:commandButton value="Speichern"
actionListener="#{addingBean.addArtikel}"
action="default"/>
</ice:form>
<ice:form>
<ice:commandButton value="Abbrechen"
action="default"/>
</ice:form>
<h:form id="bildupload">
<ace:fileEntry id="bild"
label="Bildupload"
fileEntryListener="#{addingBean.bildListener}"
maxFileCount="1"
relativePath="/images/"/>
<h:commandButton value="Upload"/>
</h:form>
<ace:messages/>
</ace:panel>
</ui:define>
</ui:composition>
</h:body>
</html>
Does somebody of you know how to resolve the Problem or why this happens?
The Liferay Faces team has seen this happen in one of our test environments, and the workaround was to exclude the icepush.jar dependency from the project:
<dependency>
<groupId>org.icefaces</groupId>
<artifactId>icefaces</artifactId>
<version>3.3.0</version>
<exclusions>
<exclusion>
<groupId>org.icepush</groupId>
<artifactId>icepush</artifactId>
</exclusion>
</exclusions>
</dependency>