JSF HtmlPanelGrid vs. HtmlDataTable

Orolhawion

Aktives Mitglied
Hallo zusammen,

ich arbeite mich gerade in JSF ein und es tauchte gerade folgende Frage auf:

Als ich mit Web-Entwicklung begann, wurde mir eingetrichtert, dass man Tabellen (<table>) nicht für das Layout benutzen sollte, sondern um Daten tabellarisch darzustellen. Welche Vor- und Nachteile das hat kann man hier nachlesen: Why tables for layout is stupid: problems defined, solutions offered

Ich kann das nachvollziehen und mache meine Layouts ohnehin mit CSS. Die Frage ist nun, wenn es offenbar ein ungeschriebenes Gesetz ist, für das Layout keine Tabellen zu benutzen, warum rendert JSF aus HtmlPanelGrid dann nicht ein geeignetes DIV-Layout, zumal es ja sogar passende CSS-Tags dafür gibt (siehe http://jimbarraud.com/2008/06/04/the-magical-css-table-cell/)? Für Daten gibt es doch HtmlDataTable wo eine Tabelle durchaus sinnvoll sein kann...
 
Zuletzt bearbeitet:

F.S.WhiTeY

Bekanntes Mitglied
Für das DIV-Tag bist du selbst verantwortlich. Nicht jeder Programmierer ist versierter HTML nutzer. Das Layout obliegt da meißt anderen und ist schon vorgegeben. Der JSF-Mensch "konvertiert" dann nur noch. Was hält dich von folgendem vorgehen ab?

Java:
<div id="header">
Header
</div>

<div id="nav">
<h:commandLink value="viewID.xhtml" styleclass="navlink" />
</div>


<div id="content">
<h:inputText value="#{blah.blubb}" styleclass="input">
</div>


Nix anderes als sonst auch. Die komponenten KANN man benutzen, muss man aber nicht. Es ist aus Programmierer-Sicht einfacher nen PanelGrip oder DataTable zu nutzen aber was du Designtechnisch machst is dein ding. CSS bleibt CSS.
 

JanHH

Top Contributor
Naja.. erstmal find ich die Devise "Niemals Tabellen für Layout benutzen" auch etwas übertrieben, bzw. etwas engstirnig von "css-Prinzipienreitern". Immerhin ist es einfach und funktioniert gut.

Man sollte das vielleicht eher so sehen: Man benutzt nicht TABLE und auch nicht DIV sondern halt h:panelGrid, und was die JSF-Implementierung daraus für HTML-Code macht, bleibt ihr überlassen. Man benutzt das korrekte JSF-Tag und verlässt sich darauf, dass JSF daraus schon den richtigen Code erzeugt. Es ist ja nicht zwangsläufig so, dass ein h:panelGrid zu einer Table werden MUSS. Man könnte auch eine JSF-Implementierung schreiben, die das mit divs realisiert (was allerdings ziemlich komplex wäre).

Man sollte aber keinesfalls direkten HTML-Code in JSF-Seiten verwenden. Alle JSF-Erweiterungen (rich faces, seam etc) haben Tags, um DIVs zu rendern. Und wenn man keine davon benutzen will kann man auch einfach h:panelGroup nehmen oder sich ein eigenes JSF-Tag schreiben, um DIVs zu erzeugen.
 

Oben