Archiv der Kategorie ‘JSF‘

 
 

Vortrag auf dem Herbstcampus 2010

Es freut mich sehr, dass ich auf dem kommenden Herbstcampus 2010 einen Vortrag halten darf. Ich werde die drei bekannten AJAX-JSF Frameworks PrimeFaces, RichFaces und IceFaces unter die Lupe nehmen und vergleichen.

Der Vortrag “Der lachende Dritte? – PrimeFaces im Vergleich zu RichFaces und IceFaces” findet am Montag, 13. 9., 11:20 – 12:30 Uhr statt.

Gespannt bin ich auch auf das umfangreiche Konferenzprogramm mit zahlreichen interessanten Vorträgen und Referenten. Ausführliche Informationen zur Konferenz findet man unter http://www.herbstcampus.de/hc10/index.html

Problem: rich:editor eingebettet in rich:modalPanel

Mal wieder so eine kleine Sache, an der man unnötig hängen bleibt und auf deren Lösung man ohne googeln kaum kommen kann.

Ausgangsstellung: Ich hatte in meiner JSF-Oberfläche mit RichFaces einen modalen Dialog eingebaut, der unter anderem einen Editor enthalten soll. Eigentlich ganz easy, nichts besonderes. Der Code sah vereinfacht und gekürzt in etwa so aus:

1
2
3
4
5
6
7
8
9
10
<rich:modalPanel id="editpanel" autosized="true">
	<h:form>
		... (andere Komponenten) ...
		<rich:editor id="editor" width="400" height="100" value="#{myBean.dialogBeschreibung}" />
		<a4j:commandButton value="Speichern" action="#{myBean.dialogSpeichern}" 
			oncomplete="#{rich:component('editpanel')}.hide();" reRender="treepanel" />
		<a4j:commandButton value="Abbrechen"
			onclick="#{rich:component('editpanel')}.hide();return false;" />
	</h:form>
</rich:modalPanel>

Eigentlich alles ok, oder? Also gut, ‘mvn tomcat:redeploy’ … ein bisschen einwirken lassen … Firefox auf, testen. Der Dialog springt sofort auf, aber der Editor ist tot, nicht mal den Cursor kriegt man zum blinken. Und auch der ‘Speichern’-Knopf zeigt keine Reaktion.

Die Lösung (besser: den Workaround) liefert JBoss.org Issue RF-7477 bzw RF-5268: Im modalPanel ist domElementAttachment=”parent” zu setzen. Zeile 1 von oben sieht dann also so aus:

<rich:modalPanel id="editpanel" domElementAttachment="parent" autosized="true">

Was lernt man daraus? Keine Ahnung, wohl das was wir schon oft gelernt haben: “Kaum macht mans richtig, schon gehts …”

Hibernate Validator 4 – Validierung, wo sie hin gehört

Vor gut zwei Wochen erschien die Version 4 des Hibernate Validators. Dabei handelt es sich um eine komplett neue Codebasis, es ist nun die Referenzimplementierung des JSR-303: Bean Validation. Der Hauptvorteil der Benutzung von Hibernate Validator ist, dass die Überprüfungen da stattfinden, wo sie maßgeblich sind, nämlich im Model. Statt also in allen Schichten (GUI/Web, Business Layer, Data Acess, …) eine eigene Prüfung zu implementieren (und sich damit leicht Inkonsistenzen und doppelten Code einzuhandeln) erfolgt die Validierung ausschließlich in den Domänen Objekten.

Die Validierung erfogt über Constraints, die als Annotationen angegeben werden. Es sind schon einige Constraints enthalten, für besondere Zwecke lassen sich eigene erstellen. Hier mal ein einfaches Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// (imports usw. weggelassen)
public class Kunde {
 
    @NotNull(message = "Ein Kunde muss einen Namen haben")
    private String nachname;
 
    @Past(message = "Geboren in der Zukunft?")
    private Date geburtstag;
 
    @Size(min=6, max=20)
    @NotNull
    private String passwort;
 
    // Getter Setter usw.
}

Highlights der Version 4 sind:

  • Native Integration in JPA 2 und JSF 2 (für SEAM Experten nichts neues, hat dort schon mit Version 3 von Hibernate Validator funktioniert)
  • Groups: Es lassen sich Gruppen definieren, welche die Validierung bestimmter Constraints anstoßen
  • Typsicherheit: Es wird sichergestellt, dass ein Constraint zum Datentyp des Properties passt.
  • stark verbesserte Testsuite
  • uvm. …

Noch ein Hinweis: Hibernate Validator kann unabhängig von einer Verwendung des Hibernate ORM eingesetzt werden.

Meine Empfehlung: Unbedingt anschauen!

JSF2 Linksammlung

Die neue Version von JSF (Java Server Faces) hat einige Verbesserungen mit sich gebracht. Hier sammle ich eine kleine Liste von Links zur Einführung in die Materie, die ich aktualisiere, wenn ich auf etwas Interessantes stoße.

To be continued … (freue mich über jeden interessanten Link!!!)


Mehr zum Blog