JSF Datatable spuckt Inhalt zwei mal aus

Masterpurzel

Mitglied
Hallo,

ich hoffe es kann mir hier jemand helfen. Mein Problem:

Ich habe in JSF 2.0 ein Datatable. Diese habe ich mit einer Bean verbunden. Er gibt mir auch das aus was ich will, nur er gibt mir den Inhalt zwei mal aus, d.h.

Allgemein
Support
...
Allgemein
Support
...

Was muss ich machen, damit das nur einmal auftaucht, also so:

Allgemein
Support
...

Falls Code gewünscht ist, bitte bescheid geben! Danke

PS: er gibt mir aus dem array (Inhalte) die richtige Anzahl der Zeilen aus, in meinem Fall 9, nur anzeigen tut er 18!

MfG

Masterpurzel
 
Hey,

wenn der Inhalt aus dem Array stimmt, dann wirst du die Ausgabe wahrscheinlich zwei mal machen. Zeig mal den Code, wo du den Inhalt in dem Array übergeben bekommst, bis zu der zweiten Ausgabe.

Gruß

Fabio
 
Hier die Bean:

Java:
int rows;
    String timestamp;
    String[] timestamp_ = new String[6];
    String datum;
    String zeit;
    ResultSet rs;

public List getForum_ansicht() {
        int i = 0;
        try{
            Class.forName(db_driver);
            try{
                Connection db = DriverManager.getConnection(db_url, db_username, db_password);
                if(req.getParameter("forumID") == null && req.getParameter("threadID") == null) {
                    String rowStatement = "SELECT id FROM forum_foren";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    String selectStatement = "SELECT id, titel FROM forum_foren";
                    PreparedStatement select_prepStmt = db.prepareStatement(selectStatement);
                    rs = select_prepStmt.executeQuery();
                    while(rs.next()) {
                        array.add(i, new forum_ansicht_spalten(rs.getInt("id"), rs.getString("titel")));
                        i++;
                    }
                } else if(req.getParameter("forumID") != null && Integer.parseInt(req.getParameter("forumID")) > 0 && req.getParameter("threadID") == null) {
                    String rowStatement = "SELECT id, forenid FROM forum_threads WHERE forenid = ?";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    row_prepStmt.setString(1, req.getParameter("forumID"));
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    String selectStatement = "SELECT id, titel, forenid FROM forum_threads WHERE forenid = ? ORDER BY timestamp_edit DESC";
                    PreparedStatement select_prepStmt = db.prepareStatement(selectStatement);
                    select_prepStmt.setString(1, req.getParameter("forumID"));
                    rs = select_prepStmt.executeQuery();
                    while(rs.next()) {
                        array.add(i, new forum_ansicht_spalten(rs.getInt("id"), rs.getString("titel"), rs.getInt("forenid")));
                        i++;
                    }
                } else if(req.getParameter("forumID") != null && Integer.parseInt(req.getParameter("forumID")) > 0  && req.getParameter("threadID") != null && Integer.parseInt(req.getParameter("threadID")) > 0) {
                    String rowStatement = "SELECT id, forenid, threadid FROM forum_messages WHERE forenid = ? AND threadid = ?";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    row_prepStmt.setString(1, req.getParameter("forumID"));
                    row_prepStmt.setString(2, req.getParameter("threadID"));
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    String selectStatement = "SELECT forum_messages.id AS forum_messages_id, forum_messages.titel, forum_messages.forenid, forum_messages.threadid, forum_messages.message, forum_messages.userid, forum_messages.userid_edit, forum_messages.timestamp_create, forum_messages.timestamp_edit, users.id AS forum_users_id, users.username, users.profil_image FROM forum_messages, users WHERE forum_messages.forenid = ? AND forum_messages.threadid = ? AND forum_messages.userid = users.id ORDER BY forum_messages.timestamp_create ASC";
                    PreparedStatement select_prepStmt = db.prepareStatement(selectStatement);
                    select_prepStmt.setString(1, req.getParameter("forumID"));
                    select_prepStmt.setString(2, req.getParameter("threadID"));
                    rs = select_prepStmt.executeQuery();
                    while(rs.next()) {
                        timestamp = new Date(rs.getLong("timestamp_create")*1000).toString();
                        timestamp_ = timestamp.split(" ");
                        if(timestamp_[0].equals("Sun")) {
                            timestamp_[0] = "Sonntag";
                        } else if(timestamp_[0].equals("Mon")) {
                            timestamp_[0] = "Montag";
                        } else if(timestamp_[0].equals("Thu")) {
                            timestamp_[0] = "Dienstag";
                        } else if(timestamp_[0].equals("Wed")) {
                            timestamp_[0] = "Mittwoch";
                        } else if(timestamp_[0].equals("Thur")) {
                            timestamp_[0] = "Donnerstag";
                        } else if (timestamp_[0].equals("Fri")) {
                            timestamp_[0] = "Freitag";
                        } else if(timestamp_[0].equals("Sat")) {
                            timestamp_[0] = "Samstag";
                        }
                        if(timestamp_[1].equals("Jan")) {
                            timestamp_[1] = "01";
                        } else if(timestamp_[1].equals("Feb")) {
                            timestamp_[1] = "02";
                        } else if(timestamp_[1].equals("Mar")) {
                            timestamp_[1] = "03";
                        } else if(timestamp_[1].equals("Apr")) {
                            timestamp_[1] = "04";
                        } else if(timestamp_[1].equals("May")) {
                            timestamp_[1] = "05";
                        } else if (timestamp_[1].equals("Jun")) {
                            timestamp_[1] = "06";
                        } else if(timestamp_[1].equals("July")) {
                            timestamp_[1] = "07";
                        } else if(timestamp_[1].equals("Aug")) {
                            timestamp_[1] = "08";
                        } else if(timestamp_[1].equals("Sept")) {
                            timestamp_[1] = "09";
                        } else if(timestamp_[1].equals("Oct")) {
                            timestamp_[1] = "10";
                        } else if(timestamp_[1].equals("Nov")) {
                            timestamp_[1] = "11";
                        } else if(timestamp_[1].equals("Dec")) {
                            timestamp_[1] = "12";
                        }
                        datum = timestamp_[0] + ", " + timestamp_[2] + "." + timestamp_[1] + "." + timestamp_[5];
                        zeit = timestamp_[3];
                        array.add(i, new forum_ansicht_spalten(rs.getInt("forum_messages_id"), datum, zeit, rs.getString("forum_messages.titel"), rs.getString("forum_messages.message"), rs.getString("users.username"), rs.getString("users.profil_image")));
                        i++;
                    }
                }
                rs.close();
                db.close();
            } catch(Exception db_error) {
                System.out.println(db_error);
            }
        } catch(Exception db_driver_error) {
            System.out.println(db_driver_error);
        }
        return array;
    }

und hier die Datatable:

HTML:
<h:dataTable id="forum" value="#{Forum__frontend.forum_ansicht}" var="item" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" first="#{Forum__frontend.first}" rows="5" width="100%" dir="LTR" frame="hsides" rules="all" summary="This is a JSF code to create dataTable.">

Ich hoffe es war das, was du gemeint hast.

MfG

Masterpurzel
 
Naja... ich würde mal sagen, dass das daran liegt, dass du in allen dreien If-Bedingungen jeweils 2 mal einen DB-Statement ausführst. :)

1. Hier fragst du nur die ID ab...
Java:
String rowStatement = "SELECT id FROM forum_foren";
PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
ResultSet row_rs = row_prepStmt.executeQuery();
2. und hier fragst du die ID nochmal mit dem Titel ab...
Java:
String selectStatement = "SELECT id, titel FROM forum_foren";
PreparedStatement select_prepStmt = db.prepareStatement(selectStatement);
rs = select_prepStmt.executeQuery();
dann würde es doch eine Abfrage auch tun oder nicht?
 
Naja... ich würde mal sagen, dass das daran liegt, dass du in allen dreien If-Bedingungen jeweils 2 mal einen DB-Statement ausführst. :)

dann würde es doch eine Abfrage auch tun oder nicht?

Naja das erste ist ja nur dazu gedacht gewesen, die Anzahl der Elemente auszugeben, aber ich glaube dass das der Grund sein kann, wie du schon vermutest... :)

Ich probiere es mal ohne der ersten Abfrage und melde mich dann wieder :) :)

MfG

Masterpurzel

€dit: lag leider nicht daran! :(
 
Zuletzt bearbeitet:
Ok, das dachte ich mir schon fast. Aber ich würde dir drotzdem empfehlen die 2 Statements zu einem zusammen zu fassen, aufgrund von Performanceeinsparungen. ;)

Soweit ich das jetzt berurteilen kann, liegt der Fehler nicht in diesem Code-Abschnitt. Kannst du noch den Code posten, in dem die Methode 'getForum_ansicht' aufgerufen wird?
 
Das wäre diese hier in der jsp:

HTML:
<h:dataTable id="forum" value="#{Forum__frontend.forum_ansicht}" var="item" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" first="#{Forum__frontend.first}" rows="5" width="100%" dir="LTR" frame="hsides" rules="all" summary="This is a JSF code to create dataTable.">
...
</h:dataTable>

in java wird sie nirgends mehr aufgerufen, nur in der jsp bzw. in der faces-config.xml definiert:

Code:
<managed-bean>
            <managed-bean-name>Forum__frontend</managed-bean-name>
            <managed-bean-class>de.pcpowerplay.frontend.forum.forum_ansicht</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
 
Mh... der Fehler muss eigentlich irgendwo im JSP liegen, wobei ich momentan keinen finden kann. Kannst du noch ein wenig mehr von der JSP preis geben? Weil an dem kleinen Schnipsel liegt das Problem meiner Ansicht nach nicht.
 

Neue Beiträge

Zurück