PrimeFaces GZip Error

Ein häufig auftretender und nicht erklärbarer Fehler in Primefaces ist der GZIP Error. Es gibt unterschiedliche Möglichkeiten bei Aktionen die definiert werden und eventuell falsch ausgeführt werden.

Wir suchen seit nunmehr – sporatisch – 1 Monat nach den Fehler und immer ist es lediglich ein kleines Quäntchen Glück das uns gefehlt hat. Es dreht sich um den wunderbaren Parameter ajax den man in den meisten Komponenten von Primefaces angeben kann und dieser dann entscheidet ob ein ajax Befehl ausgeführt wird oder nicht.

Jetzt kommt das große Ding und zugleich die Erklärung. Wenn man über outcomes gesteuerte Navigation- Elements anlegt in seiner faces-config.xml werden anhand eines String die Elmente gerootet. z.B.

<p:commandButton value="Step1" action="to-step-1" />

In der faces-config.xml werde ihr so etwas ähnliches vorfinden:

<navigation-rule>
		<display-name>Step 0</display-name>
		<from-view-id>/step0.xhtml</from-view-id>
		<navigation-case>
		 	<from-outcome>to-step-1</from-outcome>
			<to-view-id>/step1.xhtml</to-view-id>
		</navigation-case>
</navigation-rule>

Wenn ihr dieses Beispiel jetzt ausführen würdet, lauft ihr in eine Falle die nicht schön ist und aus der mann nur ganz schwer wieder heraus kommt weil es keine konkreten Hinweise dazu gibt. Wenn man in die Browserconsole oder die Entwicklertools von z.B. google Chrome schaut werdet ihr sehen das nach dem laden von step1.xhtml euer jQuery abstürzt und somit die Seite jegliche Funktionalität verliert die euch Primefaces bietet.

Einfacher Lösungsansatz:

<p:commandButton value="Step1" action="to-step-1" ajax="false" />

Der kleine Parameter ajax=“false“ verwandelt den Javascript Aufruf für den Button in einen Standardaufruf um und „refreshed“ die Seite somit korrekt und alle Funktionen werden korrekt ausgeführt!

Primefaces, Tipps & Tricks

Primefaces ist ein super Werkzeug um schnell und zuverlässig Webplattformen zu erstellen auf Basis von JEE6 mit EJB3 und einem Glassfish.

Ich arbeite derzeit mit dem Glassfish 3.1 auf Eclipse IDE Indigo (mittlerweile gibt es neuere Releases)

Primefaces hat aber so seine Eigenheiten. Wer JSF2 gewohnt ist wird schnell auf ein paar  Unterschiede stoßen. Sei es die Parameterübergabe oder auch die Formen die man beachten muss wenn man mit Primefaces arbeitet. Der Mensch ist faul und wird daher oft selbst bestraft wenn er sich nicht alles durchließt. 😉

Ein Dialog z.B. bildet eine eigene Form und benötigt somit keine weitere Ummantelung eines form Tags.

<p:dialog id="basicDialog" header="Basic Dialog" widgetVar="dlg1">  
    <h:outputText value="Sample Dialog!" />  
</p:dialog> 

Eine weitere Besonderheit sind die wenn man sie richtig anwenen möchte muss man sich etwas konzentrieren. Direkte Parameterübergabe z.B. mit

geht nicht!

Korrekt hierfür wäre, wie im Primefaces Beispiel auch schon steht, aber natürlich von mir im ersten Moment nicht so angewandt wurde ein dieser kann im Button integriert werden und z.b. über einen Dialog verarbeitet werden.

<h:form prependId="false"> 
    <h:panelGrid columns="1" cellpadding="5">  
        <h:outputText id="msg" value="#{buttonBean.text}"/>  
          
        <p:commandButton id="showDialogButton" value="Destroy the World" onclick="myDialog.show()" type="button">
            <f:setPropertyListener value="blub" target="#{bean.property}" />
        </p:commandButton>
    </h:panelGrid>  
      
    <p:dialog id="myDialog" widgetVar="myDialog">  
        <f:outputText value="Hey, #{bean.property} would u really destroy the world?" />           
    </p:dialog >  
</h:form>   

Und wieder von Anfang an

In dieser Woche habe ich ein Systemupdate gefahren. Leider ging dabei einiges schief wie ihr seht. Ich weiß nicht warum es nur den Blog betroffen hat aber leider wurden alle meine Blogdaten gelöscht. Es existiert zwar ein Backup aber leider sind die Daten schon so alt vom dem Blog das es sich nicht lohnen würde.

Etwas gutes hat es dennoch. Ich kann einen sauberen Blog anbieten und euch mit neueren Informationen rund um:

  • JSF2
  • Primefaces3
  • EJB3
  • JEE6
  • Liferay
  • Android

Dieses mal werde ich mich darauf konzentrieren beim technischen Bereich zu bleiben und nicht wieder in alle anderen Sparten abzuweichen. Ich wünsche euch viel Spaß bei meinen neuen Einträgen.