Announcement

Collapse
No announcement yet.

Vektor in JSP auslesen ohne Serveraufruf

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

  • Vektor in JSP auslesen ohne Serveraufruf

    hallo zusammen, könntet ihr mir bei einem logikfehler behilflich sein?

    auf einer jsp habe ich im javacode einen vektor, der sämtliche daten meiner
    datenbank enthält. die möchte ich nacheinander auslesen.

    wenn ich aber response.encodeURL(url)benutze um den nächsten Datensatz
    auszulesen, dann wird meine jsp-datei noch einmal komplett aufgerufen.
    die datenbank wird also erneut geöffnet, sämtlicher inhalt in den
    vektor der jsp-Datei geladen (obwohl der schon geladen war!) und dann zeigt er mir
    den 2. datensatz (pg+1). (ziemlich belastend für die datenbank, oder?)

    habe also zur fehlerbehebung versucht, in der jsp mit ".isEmpty()" eine wiederholte befüllung des vektors zu stoppen, doch ist offensichtlich nach dem erneuten aufruf
    der jsp der jsp-vektor immer leer. so bringt die abfrage also nichts.

    und in der bean, wo meine datenbankabfrage läuft, kann ich auch nichts einbauen,
    weil es sich sonst auf sämtliche user auswirken würde und nicht nur auf den client.

    hab dann versucht mit javascript den wert der jsp-zählvariable (die sich im javacode
    befindet) zu verändern.
    das geht aber offensichtlich nur anders herum, also: "var js-var = <%= jsp-var %>"

    ist in etwa klar geworden, was ich will,
    und hat jemand einen vorschlag, wie ich das problem lösen könnte?<br>
    vielen dank,<br>
    michael

  • #2
    Du musst beim erstellenm den Vector in eine Session schreiben.
    Dann bei jedem aufruf schauen ob die Session schon existiert, auslesen und ....

    Vector vector;
    vector = (Vector)session.getAttribute("s_v");

    if (vector==null) {
    // Datenbank abfrage und Vector erstellen
    session.setAttribute("s_v",vector);
    }
    else {
    // dein code
    }

    GRuss Stefa

    Comment


    • #3
      hallo stefan,

      'tschuldíge, dass ich mich erst jetzt melde.<br>
      erstmal danke für deine antwort. ich habe fleißig ausprobiert. <br>der session-scope! klar, konnte mir vorstellen, dass das klappt. hat es dann aber leider nicht,<br> weil ich meine datenbankabfrage in einer bean habe. <br>kannst du mir vielleicht sagen, wie ich die bean mit anspreche. <br>also sowas wie:
      (Vector)session.meineBean.getAttribut("s_v")??

      Comment


      • #4
        Du brauchst ja nur einmal, beim erstellen der Session eine DB Connection, da du ja alle Daten nachher im Vector hast. Und dann nur noch mit dem Vector arbeiten musst

        Comment


        • #5
          habe mich jetzt immerhin bis zu einer nullpointerexception durchgeschlagen.
          ich weiß nicht wie professionell du bist, aber vielleicht springt dir ja
          der fehler direkt ins auge, der mir unentdeckt bleibt:
          <pre>
          <jsp:useBean id="queries" class="packagename.classname" />

          <%
          int i = 0;

          Vector articles = (Vector)session.getAttribute("queries");//gibt den Wert des ...("...") aus
          if (articles==null){
          out.println("Datenbank leer");
          session.setAttribute("queries", articles);}


          if (i < articles.size())
          {
          Article article = (Article) articles.elementAt (i);
          %>
          ...Michael
          </pre&gt

          Comment


          • #6
            sende mir mal die klasse Article
            [email protected]

            denke so kommen wir weiter... :-

            Comment


            • #7
              ich sehe den code nicht wo du die Article abfühlst und den Vector initialisierst.

              Vector article = new Vector();

              hast du so was in deinem Code

              Comment


              • #8
                Falls du den Vector initialisiert hast wird
                die Prüfung
                Ein Problem wird sein das der Vector==null nie true sein wird, also entweder:
                if (articleList==null){
                articleList = new Vector();
                System.out.println("Vector erstellen");
                }
                Oder die elegantere Version Vector initialisieren:
                private Vector articleList = new Vector();

                if (articleList.isEmpty()){
                System.out.println("Vector erstellen");
                }
                Iterator it = articleList.iterator();
                while (it.hasNext()) {
                Article article = (Article)it.next();
                System.out.println("Name:"+article.getName());

                Comment


                • #9
                  Hallo Stefan,

                  ich denke, dass mein Problem ein anderes ist.

                  So wird durch den Aufruf:<br>
                  session.setAttribute("myqueries", queries.getAllArticles ());<br>
                  Vector articles = (Vector)session.getAttribute("myqueries");<br>
                  richtiger weise Daten aus der Datenbank in myqueries und
                  dann in articles geladen:

                  Mit den Aufruf:<br>
                  Article inhalt_aufruf = (Article) articles.elementAt (accessCount); <br>
                  i.V.m. einer Schleife kann ich sämtliche Daten auslesen. So weit, so gut.

                  Mein Problem ist, dass ich nicht alle auf einmal haben möchte, sondern auf
                  Knopf(Button)druck. Durch meinen JSP-Aufruf: <br>
                  url = "Display.jsp?accessCount="+String.valueOf(accessCo unt+1);<br>
                  out.print("&lt;A href=\"" + response.encodeURL(url) + "\"&gt;naechster Kurs&gt;&gt;</A>");<br>
                  wird aber die gesamte JSP neu aufgerufen. Was ich bräuchte ist einen Button, der auf der
                  Clientseite bleibt und nur eine Varible hochzählt. (oder so!)
                  <br><br>
                  Michae

                  Comment


                  • #10
                    Witzig,
                    wenn ich keine Entities im obigen Text verwende, kann ich den Link sogar im Java-Magazin benutzen...

                    out.print("<A href=\"" + response.encodeURL(url) + "\">naechster Kurs&gt;&gt;</A>")

                    Comment

                    Working...
                    X