2010-02-25 9 views
29

Facelets verwendet das Attribut jsfc, um HTML-Elemente in die zugehörigen Komponenten JSF zu konvertieren. Dies ist für schnelles Prototyping sehr hilfreich, da Sie Ihre Ansichten mit einem visuellen Design-Tool erstellen können. Allerdings habe ich vor kurzem this Blog-Beitrag von Cay Horstmann wo er auf die Verwendung von jsfc zusammen mit komplexen Komponenten wie h: dataTable.Soll ich Facelets "jsfc" Attribut verwenden?

Diese alarmierte mich als Cay Horstmann ist der Autor von mehreren meiner Lieblings-Java-Bücher. Allerdings haben meine Google-Fu-Fähigkeiten keine Ergebnisse erbracht, wenn man versucht, den Umfang/die Art des Problems zu bestimmen, abgesehen von einem kürzlich veröffentlichten Beitrag von Ed Burns, der scheint jsfc (und er ist schließlich die Co-Spezifikation führen für JSF). Also meine Frage ist einfach, ist es empfehlenswert, jsfc mit Facelets zu verwenden? und wenn nicht, was ist das Problem, das es einführt.

Antwort

32

Wie Sie gesagt haben, ist das Attribut jsfc im Wesentlichen nützlich, wenn Sie einen HTML-Prototyp zu einer JSF-Seite "konvertieren" müssen. Zum Beispiel, wenn Sie einen HTML-Eingabetext haben:

<input type="text" .../> 

können Sie das jsfc Attribut hinzufügen, um diese HTML-Komponente in eine JSF-Komponente zu konvertieren:

<input type="text" jsfc="h:inputText" .../> 

Dies entspricht Schreiben des folgenden JSF Code:

<h:inputText .../> 

Wie in der Facelets Dokumentation angegeben here oder here, das Attribut jsfc kann auch verwendet werden, um Facelets-Komponenten zu "mappen". Zum Beispiel können Sie einen Teil des HTML-Codes entfernen:

<span jsfc="ui:remove"> 
This won't be compiled either <h:outputText value="#{foo.bar}"/> 
</span> 

Sie auch eine Tabelle mit diesem Attribut erstellen:

<table> 
    <tr jsfc="ui:repeat" value="#{dept.employees}" var="emp" class="#{emp.manager ? 'mngr' : 'peon'}"> 
     <td>#{emp.lastName}</td> 
     <td>#{emp.firstName}</td> 
    </tr> 
</table> 

In diesem Beispiel verknüpfe wir nicht diese Tabelle ein h:datatable Komponente, aber wir erstellen eine Tabelle mit HTML-Code und verwenden die JSF-Komponente ui:repeat, um Zeilen zu iterieren.

Wie Sie sehen können, kann das Attribut jsfc verwendet werden, um eine HTML-Komponente in eine JSF-Komponente in einer JSF-Seite zu konvertieren. Bei komplexen Komponenten wie der Datentabelle müssen Sie daher einige Problemumgehungen verwenden (mit ui:repeat anstelle der Komponente h:datatable).

Ein weiterer Punkt ist, dass Sie keine Drittbibliotheken-Komponenten wie die von RichFaces, IceFaces, Tomahawk und so weiter verwenden können. Und diese Bibliotheken sind wirklich eines der Interessen von JSF.

Also zusammenzufassen: jsfc kann nützlich sein, um einen HTML-Prototyp in eine JSF-Anwendungen, im Wesentlichen für die Erstellung von Proof of Concepts oder das Design der allgemeinen Benutzeroberfläche zu verwandeln. Ich denke jedoch, es ist besser, diese Komponente zu vermeiden, sobald die "echte" Entwicklung beginnt ...

+0

Nun ...eigentlich habe ich gerade das jsfc-Attribut mit einer Drittanbieter-Komponente getestet, und es hat gut funktioniert ... –