Announcement

Collapse
No announcement yet.

commandLink innerhalb dataTable funktioniert nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • commandLink innerhalb dataTable funktioniert nicht

    Hallo,

    erster Beitrag und schon ein Problem.

    Ich habe 2 JSF Seiten.

    Eine dient zur Anzeige von sogenannten Ressorts in Form einer dataTable.

    Die andere soll zum Editieren einzelner Ressorts genutzt werden.
    Im Hintergrund liegt eine SessionScoped Bean die sowohl die Daten aus der Datenbank holt als auch die jeweilige Zeile zum Editieren entgegen nimmt.

    Ich habe beim Aufbau der dataTable in jeder Zeile einen html commandLink mit einer actionMethode positioniert.

    Leider funktioniert der Aufruf der Methode in der SessionScoped Bean nicht. Es wird die momentante Seite einfach nochmal erneut aufgerufen.

    Durch einen Reload der Seite wird nur eine leere Tabelle anzeigt (weil ja die entsprechende Methode nicht nochmal aufgerufen wird)

    Ich möchte aber das der Benutzer auf die zweite Seite weitergeleitet wird, wo dann die Daten der jeweils ausgewählten Zeile drinn stehen sollen.

    Okay genug geredet, jetzt gibts Code.

    Hier ein Ausschnitt meiner SessionScoped Backing Bean:

    Code:
    @ManagedBean(name = "MRessort")
    @SessionScoped
    public class MRessort implements Serializable {
    
    ...
    
       private Ressort ressortItem;
       private HtmlInputHidden ressortItemId = new HtmlInputHidden();
    
    ...
    
    // GET und SET Methoden
    
    ...
        public String editRessort(){
            
            ressortItemId.setValue(ressortItem.getId());
            
            return "editRessort";  // Navigation
        }
    
    // Anzeige der Ressorts
    
        public String viewRessortCount() {
    
            intRessorts = getRessortCount();
            ressorts = ressortFacade.findAll();
    
            return "listRessort";
        }
    
    }
    Soviel zur BackingBean.

    Meine listRessort.xhtml sieht folgendermaßen aus :

    Code:
        <ui:composition template="/NappTemplate.xhtml">
            <ui:debug/>
            <ui:define name="content">  
                <p>Es sind insgesamt <h:outputText value="#{MRessort.intRessorts}"/> Ressorts vorhanden.</p>
                <f:view>
                    <h:form id="ressortForm" prependId="false" >
                        <h:dataTable  value="#{MRessort.ressorts}" rowClasses="odd_row, even_row" var="row" border="1" cellpadding="2" cellspacing="0" >
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="ID"/>
                                </f:facet>
                                <h:outputText id="ressortID" value="#{row.id}"/>
                            </h:column>
                            <h:column>
                                <f:facet id="header" name="header">
                                    <h:outputText value="Name"/>
                                </f:facet>
                                <h:outputText id="ressortName" value="#{row.name}"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText value="MODUS"/>
                                </f:facet>
    
                                <h:commandLink   action="#{MRessort.editRessort}" value="Bearbeiten" >
                                    <f:setPropertyActionListener target="#{MRessort.ressortItem}" value="#{row}"/>
                                </h:commandLink>
                            </h:column>
                        </h:dataTable>
                    </h:form>
                </f:view>
            </ui:define>
        </ui:composition>
    Ich habe mich eigentlich strikt nach der Vorgehendweise von BalusC gehalten, der hier das was ich haben will sehr gut veranschaulicht.

    Leider funktioniert es nicht so wie er es schildert.

    Meine faces-config habe ich auch entsprechend angepasst:

    Code:
        <navigation-rule>
            <from-view-id>/protected/listRessort.xhtml</from-view-id>
            <navigation-case>
                <from-outcome>editRessort</from-outcome>
                <to-view-id>/protected/editRessort.xhtml</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>
    Wenn ich beispielsweise einen commandLink außerhalb der dataTable platziere, dann klappt zumindestens die navigation.

    Ich verzweifel langsam, versuche seit 2 Tagen das Problem zu lösen, doch bekomme es einfach nicht hin.

    Über einen nützlichen Ratschlag würde ich mich freuen.


    Liebe Grüße


    glister

  • #2
    Was genau meinst du mit "Der Aufruf der Methode funktioniert nicht"?. Wird die Methode nicht aufgerufen, oder gibt es einen Fehler in der Methode? Bitte mal mit Debugger prüfen.

    Comment


    • #3
      Der Aufruf der Methode klappt nicht.

      glister

      // Edit:

      aber außerhalb der dataTable komischerweise schon

      Comment


      • #4
        Nochmal: "Funktioniert nicht" oder "Klappt nicht" sagt mir nichts.

        Wird deine Methode aufgerufen oder nicht?

        Setzt doch im commandLink spasseshalber mal immediate="true" als Attribut.

        Comment


        • #5
          Die Methode wird nicht aufgerufen. Ein gesetzter Breakpoint wird nicht erreicht.
          Ein Hinzufügen des immediate Attributs hilft leider auch nichts.

          glister

          Comment


          • #6
            Wenn du sagst "ausserhalb der dataTable", ist dein commandLink innerhalb oder ausserhalb der form?

            Schau dir doch mal den erzeugten HTML-Code an, ob es Unterschiede gibt, wenn der commandLink innerhalb der Table ist und wenn er ausserhalb ist.

            Comment


            • #7
              hm.

              er ist natürlich innerhalb der form, da er sonst deaktiviert wäre.

              Button außerhalb der dataTable aber innerhalb der Form:

              mojarra.jsfcljs(document.getElementById('ressortFo rm'),{'j_idt66':'j_idt66'},'');return false

              Button innerhalb der dataTable und innerhalb der Form:

              mojarra.jsfcljs(document.getElementById('ressortFo rm'),{'j_idt58:13:j_idt65':'j_idt58:13:j_idt65'},' ');return false

              In dem unteren Beispiel referenziert er natürlich noch auf die jeweilige Zeile (:13: zum Beispiel) was er beim Button außerhalb natürlich nicht macht.

              glister

              Comment


              • #8
                Zum Eingrenzen des Problems:

                Was ändert sich, wenn du den <f:setPropertyActionListener> aus dem commandLink entfernst?

                Comment


                • #9
                  Es ändert sich nichts. Ich habe es auch mit einem CommandButton probiert. Ich habe es mit der Command-Komponente von primefaces probiert etc etc.

                  Und wie schon im ersten Beitrag erwähnt habe ich mich nach dem Sample von BalusC gerichtet.

                  Der Forum Beitrag hier :
                  http://forums.sun.com/thread.jspa?th...art=0&tstart=0

                  hat mir auch nicht weiter geholfen. Mein Scope ist ja schon als Session eingestellt.

                  glister

                  Comment


                  • #10
                    Hast du mal die Variante mit dem binding versucht? Ich habe bei mir immer mit dem binding-Attribut in der DataTable gearbeitet und es hat funktioniert.

                    Comment


                    • #11
                      Hm, ich habe aus Spaß meine @SessionScoped Annotation aus der Klasse entfernt und diese nach alter Manier in die faces-config eingetragen.

                      Jetzt geht es jedenfalls

                      Comment


                      • #12
                        Auch nicht schlecht, dann hast du zumindest nichts falsch gemacht.

                        Comment

                        Working...
                        X