Hallo zusammen
Ich schlage mich seit einigen Tagen mit einem mysteriösen Datatable Problem herum.
Aus einer Managed Bean "GamesMB" soll eine ArrayList "gamesNotToRegisterFor" ausgelesen und deren Elemente in einer Datatable angezeigt werden. Beim Laden der Seite wird auch die entsprechende get - Methode der Bean aufgerufen. Wenn die Bean eine leere ArrayList zurückliefert, wird eine leere Tabelle angezeigt. Andernfalls wird sie überhaupt nicht gerendert. Lediglich das umgebende Formular ist im erzeugten HTML-Code sichtbar. Merkwürdigerweise wird der Rest der Seite fehlerfrei dargestellt und auch im Server-Log sind keine Hinweise auf die Ursache des Fehlers zu finden.
Zur Verdeutlichung hier einige Codeausschnitte:
Hier ein Auschnitt der Managed Bean
Registrierung der Beans GameMB und GamesMB in der faces-config.xml
Ausschnitt aus der aufrufenden xhtml Seite
Die renderer-Attribute für die Datatable und die panelgroup mit den Hinweistexten habe ich nachtäglich eingefügt, damit beide nur angezeigt werden, wenn die ArrayList Daten enthält.
Wenn ich die Seite aufrufe ist der Hinweistext jedoch niemals sichtbar - auch dann wenn keine leere Liste zurückgeliefert wird. Der Ausdruck #{!empty gamesBean.gamesToRegisterFor} wird anscheinend überhaupt nicht oder stets zu false evaluiert, obwohl auch hier die get - Methode der Bean korrekt aufgerufen wird.
Hat jemand eine Idee, was hier falsch laufen könnte?
Thanx
Ich schlage mich seit einigen Tagen mit einem mysteriösen Datatable Problem herum.
Aus einer Managed Bean "GamesMB" soll eine ArrayList "gamesNotToRegisterFor" ausgelesen und deren Elemente in einer Datatable angezeigt werden. Beim Laden der Seite wird auch die entsprechende get - Methode der Bean aufgerufen. Wenn die Bean eine leere ArrayList zurückliefert, wird eine leere Tabelle angezeigt. Andernfalls wird sie überhaupt nicht gerendert. Lediglich das umgebende Formular ist im erzeugten HTML-Code sichtbar. Merkwürdigerweise wird der Rest der Seite fehlerfrei dargestellt und auch im Server-Log sind keine Hinweise auf die Ursache des Fehlers zu finden.
Zur Verdeutlichung hier einige Codeausschnitte:
Hier ein Auschnitt der Managed Bean
Code:
private ArrayList<GameMB> gamesNotToRegisterFor;
private ArrayList<GameMB> gamesToRegisterFor;
private HtmlDataTable gamesDataTable;
private GameMB gameItem;
[...]
public ArrayList<GameMB> getGamesToRegisterFor() {
if (logger.isDebugEnabled())
logger.debug("entered List<GameMB> getGamesToRegisterFor()");
if (gamesToRegisterFor == null || gamesToRegisterFor.size() == 0)
logger.debug("Games Vector retrieved form session-bean is null or empty.");
return gamesToRegisterFor;
}
Registrierung der Beans GameMB und GamesMB in der faces-config.xml
Code:
<managed-bean>
<managed-bean-name>gameBean</managed-bean-name>
<managed-bean-class>control.managedBeans.GameMB</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>gamesBean</managed-bean-name>
<managed-bean-class>control.managedBeans.GamesMB</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Ausschnitt aus der aufrufenden xhtml Seite
Code:
<h:panelGroup styleClass="messagecontainer" rendered="#{!empty gamesBean.gamesToRegisterFor}">
<h:outputText value="#{res['welcome.gamesToRegisterFor']}" styleClass="statusmessageheader"/>
<h:outputText value="#{res['welcome.newGameNamesList']}" styleClass="statusmessageelement"/>
</h:panelGroup>
<h:form id="selectGameToRegisterForm" styleClass="formcontainer" rendered="#{!empty gamesBean.gamesToRegisterFor}">
<h:dataTable id="selectGameToRegisterTable" value="#{gamesBean.gamesToRegisterFor}"
var="gameItem" binding="#{gamesBean.gamesDataTable}"
border="0" cellpadding="0" cellspacing="0" rowClasses="tableelement1, tableelement2">
<h:column>
<f:facet name="header">
<h:outputText value="#{res['base.game']}" styleClass="tableheader"/>
</f:facet>
<h:commandLink action="#{gamesBean.executeGameSelection}" value="#{gameItem.name}" styleClass="tablelink"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{res['welcome.game.description']}" styleClass="tableheader"/>
</f:facet>
<h:outputText value="#{gameItem.descriptionShort}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{res['game.base.turn']}" styleClass="tableheader"/>
</f:facet>
<h:outputText value="#{gameItem.round}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{res['welcome.game.closingDateOfRound']}" styleClass="tableheader"/>
</f:facet>
<h:outputText value="#{gameItem.ending}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{res['welcome.game.mainLink']}" styleClass="tableheader"/>
</f:facet>
<h:outputLink value="#{gameItem.mainLink}">
<h:outputText value="#{gameItem.mainLink}" styleClass="tablelink"/>
</h:outputLink>
</h:column>
</h:dataTable>
</h:form>
Die renderer-Attribute für die Datatable und die panelgroup mit den Hinweistexten habe ich nachtäglich eingefügt, damit beide nur angezeigt werden, wenn die ArrayList Daten enthält.
Wenn ich die Seite aufrufe ist der Hinweistext jedoch niemals sichtbar - auch dann wenn keine leere Liste zurückgeliefert wird. Der Ausdruck #{!empty gamesBean.gamesToRegisterFor} wird anscheinend überhaupt nicht oder stets zu false evaluiert, obwohl auch hier die get - Methode der Bean korrekt aufgerufen wird.
Hat jemand eine Idee, was hier falsch laufen könnte?
Thanx