JSF Datatable, nichts geht ohne vorher zu refreshen...

moessi91

Bekanntes Mitglied
Hallo,
ich habe ein kleines großes Problem bei meinem Datatable....
und zwar funktioniert rein gar nichts bevor ich nicht die seite gerefreshd habe.
folgendes passiert chronologisch aufgereiht:
1. ich komme auf die login page
2. einloggen -> es wird die hauptseite angezeigt (2. codestück mit leerem inhalt)
3. ich klicke auf meinen link, welcher mich auf die userliste (1. codestück) weiterleitet.
4. wenn ich hier jetzt auf den Pfeil für fetchnext() klicke kommt folgender fehler:
javax.faces.component.StateHolderSaver cannot be cast to [Ljava.lang.Object
(gleiches ergebnis wenn ich auf den link klicke)
5. ich refreshe die Seite
6. wenn ich jetzt auf einen pfeil klicke geht alles. auch der commandbutton geht ohne probleme(commandlink aus irgendeinem grund nicht, bitte auch um lösung)
7. wenn ich jetzt aber auf einen anderen link in meiner navigationsleiste klicke und dann wieder auf die userliste geht wieder nichts... erst muss wieder refresht werden.???


hier mal die seite mit dem table... alle ausschnitte sind gekürzt und nur der notwendige teil enthalten.
Java:
<h:form id="table">
                <div align="center" style="width: 50%">
                    <f:ajax render="table:usertable" >
                        <h:commandLink actionListener="#{usermanagement.fetchNext()}">
                            <img src="images/datatable/Pfeil_links.png" width="40" height="40" alt="Back"/>
                        </h:commandLink>
                    </f:ajax>    
                </div>
                <h:dataTable value="#{usermanagement.lBenutzer}" var="benutzer" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" first="0" 
                              width="50%" frame="hsides" rules="all" dir="LTR" id="usertable">
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="ID"/>
                        </f:facet>
                        <h:outputText value="#{benutzer.ID}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Edit"/>
                        </f:facet>
                        <h:commandButton value="edit" action="home">
                            <f:setPropertyActionListener target="#{renderMain.sOutput}" value="editUser.xhtml" />
                            <f:setPropertyActionListener target="#{usermanagement.selectedUser}" value="#{benutzer}" />
                        </h:commandButton>
                    </h:column>
        
                </h:dataTable>
            </h:form>
hier noch kurz die seite auf welche mit edit weitergeleitet wird. es wird bei mir immer auf diese Seite weitergeleitet und anhand des rendermain objekts includiert sie dann die gewollte seite.
Java:
<h:form>
            <f:ajax render=":contentform">               
                        <h:commandLink value="Home" actionListener="#{renderMain.setsOutput('Main.xhtml')}" ></h:commandLink><br/>
                        
                    </c:when>                   
            </f:ajax>
        </h:form>
    </ui:define>
    
    <ui:define name="content">
        <h:form id="contentform">
            <ui:include src="#{renderMain.getsOutput()}"></ui:include>
        </h:form>
    </ui:define>
 
Das, was Du im Text beschreibst, erfordert viel mehr Code, als Du dann zur Verfügung stellst. Die ganze Sache ist etwas zu wirr, sozusagen. Kannst Du nicht ein einfacheres Beispiel bauen, ohne Login und Pfeile und dergleichen, einfach eine simple Seite und eine simple java-bean, bei der der Fehler zu erkenen ist?
 
Zuletzt bearbeitet:
Nun ja, es ist ja schon relativ zusammengekürzt.
Im unteren Teil des Codes sieht man wie auf andere Seiten weitergeleitet wird. Also nur ein getter und Setter...
Im oberen Teil sieht man wie das ganze aufgerufen wird.
Also im Datatable ist ein Commandbutton, welcher auf die seite "home.xhtml"(2. Code Teil) verweißt was man in der Action sieht. Dabei wird in dem Usermanagementbean der selected User auf den user in der jeweiligen spalte gesetzt. und sOutput auf "editUser.xhtml". wenn ich jetzt das home aufrufe wird im 2. UI teil die seite "editUser" eingebunden.
 

Zurück
Oben