JSF Composite Component

miketech

Bekanntes Mitglied
Hallo zusammen,

ich wollte in JSF meine erste eigene Komponente bauen. Diese sieht wie folgt aus:

test.xhtml
Code:
<?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"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:composite="http://java.sun.com/jsf/composite">



<ui:composite>
	<h:outputText value="ok"/>
</ui:composite>
</html>

Ich habe die test.xhtml in meinen WebContent-Ordner unter "resources/components/dialogs" abgelegt. Resources liegt auf der selben Ebene wie WEB-INF und META-INF.

Nun möchte ich die Komponente nutzen:

Code:
<?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"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:dialogs="http://java.sun.com/jsf/composite/components/dialogs">

<h:head>
</h:head>

<h:body>
<h:form>
	
	<dialogs:test></dialogs:test>
</h:form>
</h:body>
</html>

Zeigt mir jedoch nichts an :/ Stattdessen wird dialogs:test direkt im HTML ausgegeben. Er unterstreicht mir auch den Namespace xmlns:dialogs="http:/...." bereits und behauptet, er kennt ihn nicht. Ich habe aber gelesen, dass alles was unter "composite" im Namespace steht auf die Pfade unter Resources gemapped wird. D.h. irgendwie findet er vielleicht den Resource Ordner nicht? Wo muss der denn sonst sein, wenn nicht auf oberster Ebene? Muss der noch irgendwie eingebunden werden?

Wäre für Tipps dankbar.

Gruß

Mike
 

JimPanse

Bekanntes Mitglied
Eine Composite-Component benötigt einen Implementierungsteil

[XML]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/htm
xmlns:f="http://java.sun.com/jsf/core"
xmlns:cc="http://java.sun.com/jsf/composite">

<cc:implementation>
<h:eek:utputText value="ok"/>
</cc:implementation>
</html>[/XML]

Du hast eine Composition erstellt, die entweder in einer tag-lib als Tag definieren musst oder du kannst die Composition auch als template aufrufen.

Greetz
 

miketech

Bekanntes Mitglied
Ah, danke, dachte Composition und Composition Component wären dasselbe. Aber auch mit der implementation funktioniert es nicht. Ich glaube, er findet die Komponente nicht.

Nun weiß ich gar nicht, was für meinen Zweck das geeignetere ist :) Hintergrund ist:

Ich habe eine recht große Single One Page Web Application, also quasi eine Anwendung mit nur einer Seite. Hier werden mehrere Dialoge eingeblendet usw. Innerhalb der Dialoge habe ich teilweise identische IDs für die Felder. Bspw. ein Feld "name".

Bisher habe ich die Dialoge getrennt in einzelnen xhtml-Files angegeben und mit <ui:include> integriert. Dann gab es aber Kollissionen mit den Namen. Dann habe ich überall <f:subview>-Elemente ergänzt, allerdings wurde mir gesagt, dass das weniger hübsch sei. Wieso, weiß ich nicht :)

Nun ist die Frage: Was mache ich denn in diesem Fall? Für jeden Dialog eine Composition Component? Für jeden Dialog eine Composition und ein Tag-Lib?

Wie gehe ich denn generell bei einer solchen Seite vor? Werden alle Dialoge, die angezeigt werden können, einmalig in der Hauptseite eingebunden und bei Bedarf angezeigt?

Wie gehe ich mit wechselnden Inhalten vor? Eine große ManagedBean für die gesamte Seite? Oder alles in Compositions teilen und dann jeweils eine Managed Bean dazu? Also wenn Du hierfür eine gute Quelle hast, gerne :)

Gruß

Mike
 

JimPanse

Bekanntes Mitglied
Ich weiß nicht genau ob JSF für eine Single-Page Anwendung geeignet erscheint. Ich glaube da macht sich Vaadin besser.

Nochmal zum Thema Composite-Components:
http://www.mkyong.com/jsf2/composite-components-in-jsf-2-0/

und hier ein Beitrag wie man Compositions + CC miteinander kombinieren kann (vielleicht hilft es dir weiter):

http://www.java-forum.org/web-tier/...en-weg-sobald-column-composite-component.html

Eine ManagedBean für die gesamte Seite wird ziemlich teuer mit der Zeit. Ich würde es splitten in Controller/EventHandler (RequestScope) und Beans die Zustände halten (ViewScope oder SessionScope).

greetz
 
Zuletzt bearbeitet:

miketech

Bekanntes Mitglied
Tja, die Frage habe ich mir auch schon gestellt :) Die Qual der Wahl... Ich dachte alternativ an GWT. Ich suche nach einer Variante, die möglichst nachhaltig ist und da erschien mir JSF eigentlich eine gute Wahl.

Aber es ist auch stellenweise wirklich mühsam :)

Gruß

Mike
 

miketech

Bekanntes Mitglied
Jetzt gehen ja auch Gerüchte um die Zukunft von GWT um. Ist die Frage, ob GWT dann so ein sicherer Hafen wäre :) Google I/O 2012 wird sicherlich mehr dazu verraten. Aaalso schaue ich mir doch einmal Vaadin an.

Architekturell ist JSF eigentlich recht attraktiv. Fügt sich schön in andere Technologien wie CDI ein. Aber es ist doch alles recht schwierig, zumindest komme ich oft an Punkte, wo etwas nicht geht, wie ich es mir vorstelle.

Gruß

Mike
 

miketech

Bekanntes Mitglied
Jetzt dachte ich, ich hätte meinen Favouriten mit Vaadin gefunden, und nun sitze ich hier schon seit Minuten und warte darauf, dass der GWT Compiler mal fertig ist :)

Also von richtigen RIA-Anwendungen sind wir wohl noch ganz schön weit entfernt :) Es ist zumindest alles sehr mühsam.

Gruß

Mike
 
M

maki

Gast
Architekturell ist JSF eigentlich recht attraktiv. Fügt sich schön in andere Technologien wie CDI ein. Aber es ist doch alles recht schwierig, zumindest komme ich oft an Punkte, wo etwas nicht geht, wie ich es mir vorstelle.
Ich persönlich sehe das anders, JSF ist dank JSF 1.x für mich immer noch unfertiger Quark, klar sollen Dinge besser geworden sein mit JSF2, aber richtig gut?
Hmm... CDI ist leider auch nicht ganz gut gelungen IMHO, da gibt es Frameworks die mehr leisten von denen CDI abgekupfert wurde.

Man darf nicht vergessen dass JEE normalerweise nix neues erfindet, da werden meistens nur Dinge für JEE spezifiziert die ohne JEE schon seit jahren (oft besser) laufen und sehr verbreitet sind.

Facelets sind zB. von Tapestry abgekupfert, CDI von Spring, woher JPA kommt weiss mittlerweile fast jeder(?) usw.

Das alles gab es schon bevor es durch das JCP "standartisiert" (sind aber keine echten Standards) wurde.

Für GWT gibt es zB. Gin als Anbindung an Guice falls du dich für DI interessierst, Guice ist mittlerweile die Referenzimplmentierung für DI (JSR-330) in Java.
 
Zuletzt bearbeitet von einem Moderator:

miketech

Bekanntes Mitglied
Hi,

aber auch bei GWT benötige ich diesen Compiler, der irgendwie enorm langsam bei mir ist. Wobei ich fast das Gefühl hatte, dass er in einem GWT Projekt, das ich getestet hatte, schneller lief als in Vaadin. Aber bei GWT gibt es nicht so schöne Komponenten, wenn man nicht auf SmartGWT und Sencha GXT setzt. Letzteres ist ohnehin kostenpflichtig für kommerzielle Anwendungen und ersteres nur eingeschränkt kostenlos und angeblich ja auch kein natives GWT. Daher fallen beide für mich weg.

Die Vaadin Komponenten sind schon ganz nett. Ich liebäugele ja nun mit Eclipse RAP :) Ich will ja wirklich eine RIA bauen und keine Webseite mit paar schönen Komponenten.

Gruß

Mike
 

Ähnliche Java Themen

Neue Themen


Oben