Announcement

Collapse
No announcement yet.

datatable : Zeileninhalt programmgesteuert markieren

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

  • datatable : Zeileninhalt programmgesteuert markieren

    hi all,
    komme mit folgender Aufgabe nicht weiter :

    1. einen zu suchenden Wert (z.B. Postleitzahl) manuell eingeben
    2. diesen Wert in einer gepagten datatable suchen
    3. wenn gefunden, die betreffende Zeile in der datatable markieren,
    ggf. muß dazu auf eine andere Page gesprungen werden

    in JavaSE mußte ich dazu nur das Datamodel von jtable durchforsten.

    vermute mal, daß das mit javascript zu machen wäre, folgender Code in Javascript
    (js-Funktionsaufruf durch command-Button auf der Webseite) :
    Code:
    function get_pattern_num()
    {
        var sPattern="";
        var sRowContent="";
        var singleRow;
        sPattern=prompt("Bitte Suchmuster(Zahl) eingeben");
        sPattern=sPattern.trim();
        alert("Ihre Eingabe : "+sPattern);
        /* var trs = this.document.getElementById('dt').getElementsByTagName('tbody')[0]
            .getElementsByTagName('tr'); */
        /* alert("DT enthaelt Anz.Zeilen : "+document.getElementById('dt').rows.length);*/
        alert("test doc.title : "+document.title);
        alert("DataTable : "+document.getElementById('dt').getElementsByTagName('tbody')[0]
            .getElementsByTagName('tr').data);
        for (i=1; i < document.getElementById('dt').rows.length; i++)
        {
            sRowContent = document.getElementById('dt').rows[i].cells[0].childNodes[0].data;
            alert("Inhalt Zeile : "+sRowContent);
            singleRow = document.getElementById('dt').rows[i];
            if(sRowContent.indexOf(sPattern) >= 0)
            {    
                alert("Pattern found in Row : "+i);
                singleRow.bgColor = "red";
                break;
            }    
        }
    
    }
    irgendwie kenn ich mich mit der Hierarchie des Dokumentes net aus..
    der zuletzt angezeigte alert ist :
    Code:
       alert("test doc.title : "+document.title);
    dann kommt nix mehr, auch keine reaktion von datatable zu bemerken..

    hab openfaces (o:datatable) benutzt, gibt es unterschiede zu h:datatable ?

    ist da was mit jQuery möglich , oder wie oder was..

    please help !

  • #2
    Enthält die beim Client angezeigte Tabelle immer den gesuchten Wert?
    Wenn ja kannst du mit JQuery den Wert finden und die Zeile oder Zelle markieren -> bsp. über add/remove Class
    Wenn nein musst du einen Request ausführen und dafür sorgen, dass der Wert in der Tabelle ist, die dann beim Client gerendert wird.

    Um die Zeile/Zelle mit JQuery finden zu können, kannst du einen Selektor benutzen. Hier bsp. den contains-Selektor mit TD und dem gesuchten Wert.
    Christian

    Comment


    • #3
      p.s.:
      also, das Scratchpad von Firefox sagt mir : document.getElementById(...) is null

      wo finde ich info zum Elementbaum des Dokumentes ?
      Dieses hab ich ja offenbar mit korrekter angabe bei document.title richtig zu fassen gekriegt,
      aber wo "liegt" jetzt datatable ?

      Comment


      • #4
        danke christian

        jetzt habe mer "gleichzeitig" gepostet :-)

        wo kommt denn der jQueryCode überhaupt hin :

        in javascript oder bei facelets in den xhtml-code oder in ein bean oder..

        das wird bei den beispielen im web leider auch (fast ?) nie gesagt..
        bin noch "newbie" in dieser unsrer web-welt .-(

        Comment


        • #5
          Siehe Beitrag #2
          Die datatable aus JSF/Openfaces exitstiert nicht mehr. Das ist ein Javaobject, dass dann zu einer HTML-Tabelle wird. Der Javascript-Code kommt in eine extra Datei und wird ganz normal mit der Seite geladen, also in die XHTML-Seite mittels <script src="
          Christian

          Comment


          • #6
            Eventuell solltest du dir noch das ansehen

            Filtering

            The DataTable component provides a powerful mechanism for interactive data filtering to make it easier for the users to browse data sets of any size and complexity. It is possible to:
            • define column data filters,
            • define filters that search data on a complex expression rather than a single-column expression,




            http://openfaces.org/documentation/d...datatable.html
            Christian

            Comment


            • #7
              ich will aber nicht filtern (also anzeigemenge verkleinern),
              sondern die Zeile eines gesuchten und gefundenen Wertes markieren :

              prinzipiell hab ich das mit
              Code:
               
              <o:row  condition="#{art.QAmatch == artikelBean.sqamt}" 
                                      style="background-color:  #c2dfef;color: blue;"/>
              hingekriegt (leider rollt er nicht zur richtigen zeile) ,
              a b e r :
              wieso wird eine Variable 'sqamt' nicht als Property anerkannt, obwohl ich
              getter und setter dafür in die artikelBean geschrieben habe :
              [CODE]
              private Integer sqamt;

              public Integer getsqamt()
              {
              return sqamt;
              }

              public void setsqamt(Integer p_qamt)
              {
              sqamt = p_qamt;
              }

              mit einem Inputfeld in der gleichen Form wollte ich den Suchwert angeben lassen und ein command-Button
              sollte den Submit auslösen :
              Code:
                         <h:outputText value="Artikelnr. : " class="form_label1" />
                          <h:inputText id="ip_qam_suche" class="form_input1" value="#{artikelBean.sqamt}"/>    
              
                                 <h:commandButton value="Neu" class="btn_cmdBtn"
                                                   action="#{artikelBean.setart_qamatch(artikelBean.sqamt)}" type="submit"  />
              aber das Ganze funzt net, weil ich nicht weiß, wie ich den Suchwert an die condition bei o:row weiterreichen soll..

              ???

              Comment


              • #8
                Ev. weil nach Beankonvention die Getter/Setter

                [highlight=java]
                public Integer getSqamt()
                {
                return sqamt;
                }

                public void setSqamt(Integer sqamt)
                {
                this.sqamt=sqamt;
                }


                [/highlight]

                lauten müssten
                Christian

                Comment


                • #9
                  Danke,Christian,
                  das hat schon mal geholfen..valueChange-Event bei Eingabe des Suchwertes abfangen und in sqamt speichern,
                  dann funzt auch die programmgesteuerte Markierung !
                  Allerdings macht der Rollbalken noch nicht mit, eventuell ist die markierte Zeile nicht sichtbar !
                  könnte über "o:scrolling ..position" einzustellen sein ?
                  ..find dazu bisher noch nix im web

                  Comment


                  • #10
                    http://openfaces.org/documentation/t...scrolling.html
                    Christian

                    Comment


                    • #11
                      hab ich schon längst gelesen, nützt mir aber absolut nix :
                      position false javax.el.ValueExpression
                      (must evaluate to java.lang.Object) true null Defines the current scrolling position

                      nach test mit
                      Code:
                      position="#{artikelBean.drowpointer}"
                      und in der Bean mit passendem getter/setter :
                      Code:
                      private Point drowpointer = new Point(10,1);
                      ..
                      ...
                          public Point getDrowpointer()
                          {
                              return this.drowpointer;
                          }        
                          
                          public void setDrowpointer(Point p_rowpointer)
                          {
                              this.drowpointer = p_rowpointer;
                          }
                      hab ich nur herausgekriegt, daß ein Wertepaar vom Typ java.awt.Point (int,int) erwartet wird.
                      Muß ich mich jetzt mit der geometrischen Ausarbeitung von datatable auseinandersetzen ?

                      ich will doch nur den Rollballen so verschieben, daß die markierte Zeile auch im datatable-Fenster erscheint.
                      oh weia :-)

                      Leider find ich auch nix gescheites zum objektbaum der datatable fuer Javaskript, getElementbyId
                      und getElementsByTagName sind immerzu Null..

                      seufz

                      Comment


                      • #12
                        hab ich schon gesehen, das nützt mir leider überhaupt nix :
                        Code:
                         
                        <o:scrolling autoScrollbars="true" position="#{artikelBean.drowpointer}"    />
                        drowpointer wird als java.awt.Point(int,int) , in o.g. Doku aber als Objekt verlangt, also Einstieg in die Gemometrie von datatable ? Wie Wo?

                        auch mit javaskript komme ich derzeit nicht weiter : fehlt mir ein Objektbaum, wie komme ich an den Rollbalken ?
                        oder wie krieg ich den Rollbalken mit Java in der Bean zu fassen ? Oder gibts sowas wie'n Cursor in SQL ?

                        seufz

                        Comment


                        • #13
                          auch das "spielen" mit verschiedenen angaben für das wertepaar für drowpointer zeigt keine Änderung der Rollbalkenposition..

                          Comment

                          Working...
                          X