10/01/2010

Probleme mit dem ICEFaces DataTable und Liferay

Problem : Wird das attribut scrollable="true" an eine ICEFaces dataTable gesetzt, kommt ICEFaces bei der justierung der Breiten der Tabellenheader und der Tabellenspalten durcheinander.
Konkret: Die Tabellenheader passen nicht zur Breite der Tabellenspalten.

Lösung: Zurzeit habe ich nur ein Provisorium gefunden:

1) Die Tabelle bekommt mit columnWidths die pixelgenaue Breite der Tabellenspalten übergeben. Prozentuale Werte sind leider nicht möglich (siehe Tag Beschreibung)

2) Die columns bekommen auch die Breite pixelgenau übergeben, per css.

Beispiel:
<ice:dataTable id="selectedDocuments"
style="width:100%;border-width:0px" columnWidths="900px, 900px;"
value="#{bean.werte}" var="wert" scrollable="true" resizable="false">

<ice:column style="width: 900px;">
<f:facet name="header">
<ice:outputText value="Title" />
</f:facet>
<ice:outputText value="text" />
</ice:column>
<ice:column style="width: 900px;">
<f:facet name="header">
<ice:outputText value="Titel" />
</f:facet>
<ice:outputText value="text2" />
</ice:column>
</ice:dataTable>


Problem 2: Auch wenn man jetzt Header und Spalten "gleichgeschaltet" hat - man kann die Tabellen immer noch nicht einfach so in einem Portlet nutzen - denn wie groß soll die Tabelle denn sein ? Ein Portlet kann seine Größe schließlich ändern ...

Lösung:  Wenn die dataTable mit 100% gestylt wird, nimmt die erst einmal die gesamte Breite ein. Dann die Tabellenspalten breiter machen, wie die Bildschirmauflösung - also so breit, daß es auf jeden Fall immer die gesamte Breite einnehmen wird (oben habe ich 900px genommen). Die Kombination aus 100% und den zu breiten Spalten sorgt dafür, daß die Tabelle die gesamte Breite einnimmt, aber nicht mehr. Sie skaliert sich zu recht. Sollte ich noch einen Weg finden, wie ich an die Portletbreite komme, dann werde ich diesen Eintrag noch updaten.


UPDATE

Das funktioniert natürlich nicht für IE 6 - IE8. Dort bleibt uns nichts anderes übrig als absolute Werte zu nehmen.