JSF Merkwürdiges Verhalten einer Bean

purzel

Bekanntes Mitglied
Hallo,

ich habe ein Problem und weiß keinen Rat mehr. Wenn ich in einer Methode eine Variable fülle und dann per [DUKE]System.out.println(rows);[/DUKE] ausgebe, dann erhalte ich den Wert in
Code:
rows
. Wenn ich ihn allerdings per
Code:
return rows;
ausgeben lassen will (zum weiterverarbeiten), dann kommt da nix mehr raus :(

Java:
public int count() {
        try{
            Class.forName(db_driver);
            try{
                Connection db = DriverManager.getConnection(db_url, db_username, db_password);
                if(search_item.equals("1")) {
                    String rowStatement = "SELECT id, inhalt FROM news WHERE inhalt LIKE ?";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    row_prepStmt.setString(1, "%" + search_value + "%");
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    System.err.println("News: " + rows);
                    row_rs.close();
                } else if(search_item.equals("2")) {
                    String rowStatement = "SELECT id, username FROM users WHERE username LIKE ?";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    row_prepStmt.setString(1, "%" + search_value + "%");
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    System.err.println("User: " + rows);
                    row_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 rows;
    }

bei Zeile 24 zum Beispiel kommt 2 raus, bei
Code:
count()
kommt 0 raus ???:L

Wer kann mir einen Tipp geben, was ich falsch mache?

Achja fast vergessen: Das ganze wird in einer JSF-Seite aufgerufen!

LG

Purzel
 

turtle

Top Contributor
Also, bei mir(in Eclipse) compiliert Dein Code nicht.

Und das liegt daran, dass rows nicht bekannt ist. Du musst natürlich rows definieren!

Java:
	public int count() {
        int rows;
		try{
            Class.forName(db_driver);
            // Dein weiterer Code
 

purzel

Bekanntes Mitglied
rows habe ich so definiert:

Java:
public class suche {
int rows;
...
public int count() {
...
}
}

falls mehr Code erwünscht ist, poste ich dann natürlich!
 

purzel

Bekanntes Mitglied
Ja, mehr Code wäre hilfreich. Vlt ist der Fehler ja woanders.


gesamte Klasse:
Java:
package de.pcpowerplay.frontend.suche;

import java.io.IOException;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author purzel
 */
public class suche implements Serializable {
    /**
     * Datenbank
     */
    final String db_driver = "com.mysql.jdbc.Driver";
    final String db_url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/pcpowerplay";
    final String db_username = "yyyyyyyyyy";
    final String db_password = "zzzzzzzzzz";

    String search_value;
    String search_item;
    int first;
    int rows;
    int rows_per_site = 15;
    int site = 1;
    ResultSet rs;

    HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();

    public String getSearch_value() {
        return search_value;
    }

    public void setSearch_value(String search_value) {
        this.search_value = search_value;
    }

    public String getSearch_item() {
        return search_item;
    }

    public void setSearch_item(String search_item) {
        this.search_item = search_item;
    }

    public void doSearching() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map requestMap = context.getExternalContext().getRequestParameterMap();
        try {
            //FacesContext.getCurrentInstance().getExternalContext().redirect("suche.faces?item=" + search_item + "&value=" + search_value);
            FacesContext.getCurrentInstance().getExternalContext().redirect("suche.faces");
        } catch (IOException ex) {
            Logger.getLogger(suche.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public int count() {
        try{
            Class.forName(db_driver);
            try{
                Connection db = DriverManager.getConnection(db_url, db_username, db_password);
                if(search_item.equals("1")) {
                    String rowStatement = "SELECT id, inhalt FROM news WHERE inhalt LIKE ?";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    row_prepStmt.setString(1, "%" + search_value + "%");
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    System.err.println("News: " + rows);
                    row_rs.close();
                } else if(search_item.equals("2")) {
                    String rowStatement = "SELECT id, username FROM users WHERE username LIKE ?";
                    PreparedStatement row_prepStmt = db.prepareStatement(rowStatement);
                    row_prepStmt.setString(1, "%" + search_value + "%");
                    ResultSet row_rs = row_prepStmt.executeQuery();
                    row_rs.next();
                    row_rs.last();
                    rows = row_rs.getRow();
                    System.err.println("User: " + rows);
                    row_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 rows;
    }

    private suche_spalten[] suche = new suche_spalten[count()];

    public suche_spalten[] getSearch() {
        int i = 0;
        try{
            Class.forName(db_driver);
            try{
                Connection db = DriverManager.getConnection(db_url, db_username, db_password);
                if(search_item.equals("1")) {
                    String selectStatement = "SELECT id, titel, inhalt FROM news WHERE inhalt LIKE ?";
                    PreparedStatement select_prepStmt = db.prepareStatement(selectStatement);
                    select_prepStmt.setString(1, "%" + search_value + "%");
                    rs = select_prepStmt.executeQuery();
                    while(rs.next()) {
                        suche[i] = new suche_spalten(rs.getInt("id"), rs.getString("titel"), rs.getString("inhalt"));
                        i++;
                    }
                } else if(search_item.equals("2")) {
                    String selectStatement = "SELECT id, username FROM users WHERE username LIKE ?";
                    PreparedStatement select_prepStmt = db.prepareStatement(selectStatement);
                    select_prepStmt.setString(1, "%" + search_value + "%");
                    rs = select_prepStmt.executeQuery();
                    while(rs.next()) {
                        suche[i] = new suche_spalten(rs.getInt("id"), rs.getString("username"));
                        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 suche;
    }

    public String weiter() {
        first = first + rows_per_site;
        site++;
        if(first > count()) {
            first = count() - rows_per_site;
        }
        return null;
    }

    public String zurueck() {
        first = first - rows_per_site;
        site--;
        if(first < 0) {
            first = 0;
            site = 1;
        }
        return null;
    }

    public boolean getWeiterVisible() {
        if(first + rows_per_site > count()) {
            return false;
        } else {
            return true;
        }
    }

    public boolean getZurueckVisible() {
        if(first <= 0) {
            return false;
        } else {
            return true;
        }
    }

    public int getSeite() {
        return site;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    public int getFirst() {
        return first;
    }
}
 

XHelp

Top Contributor
Du solltest dir wirklich mal die Namensconvention von Java angucken.
Was mir auffällt:
[JAVA=103]private suche_spalten[] suche = new suche_spalten[count()];[/code]
Da initialisierst du direkt beim Erstellen der Instanz dein Array, noch bevor du irgendeinen Suchstring übergeben hast.
Ansonsten pack den Code mit Debugausgaben voll und schau was wirklich passiert und wo was warum mit welchen Parameter aufgerufen wird.
 

purzel

Bekanntes Mitglied
Du solltest dir wirklich mal die Namensconvention von Java angucken.
Was mir auffällt:
[JAVA=103]private suche_spalten[] suche = new suche_spalten[count()];[/code]
Da initialisierst du direkt beim Erstellen der Instanz dein Array, noch bevor du irgendeinen Suchstring übergeben hast.
Ansonsten pack den Code mit Debugausgaben voll und schau was wirklich passiert und wo was warum mit welchen Parameter aufgerufen wird.

Schau mal in
Code:
count()
, da wird der Suchstring bereits verwendet!

Eine Debugausgabe ist zum Beispiel dieses
Code:
System.err.println("User: " + rows);
 
Zuletzt bearbeitet:

purzel

Bekanntes Mitglied
Mal eine Frage nebenbei:

Ist es relevant dass das Bean-Scope "application" ist, oder hat es damit nix zu tun?

[XML]
<managed-bean>
<managed-bean-name>Suche__frontend</managed-bean-name>
<managed-bean-class>de.pcpowerplay.frontend.suche.suche</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
[/XML]

PS:

als Debug-Ausgabe erhalte ich in der Konsole folgende Ausgaben:

java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0

mit
Code:
System.out.prinln();
:

java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.NullPointerException
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
User: 2
java.lang.ArrayIndexOutOfBoundsException: 0
java.lang.ArrayIndexOutOfBoundsException: 0
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Das ist eine Debugausgabe mit einem Informationsgehalt von 0.
Mach das so, dass aus der Ausgabe ersichtlich ist, was wann warum aufgerufen wird und was die Werte der Variablen zu diesem Zeitpunkt sind.
 

purzel

Bekanntes Mitglied
Ich bin jetzt einen Schritt weiter, allerdings weiß ich nicht die Ursache:

wenn ich
Code:
suche_spalten[] suche = new suche_spalten[count()];
ausführe bekomme ich bei [DUKE]count()[/DUKE] IMMER "0" raus. Wenn ich allerdings INNERHALB von
Code:
public suche_spalten[] getSearch() {}
[DUKE]count()[/DUKE] aufrufe funktioniert es, da bekomme ich in meinem Fall "2" raus. Was könnte die Ursache dafür sein? ???:L
 

XHelp

Top Contributor
Das habe ich doch schon oben geschrieben: die Methode count() darfst du erst aufrufen, nachdem du
Code:
search_item
gesetzt hast.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Redirect führt zu seltsamen CSS-Verhalten Web Tier 8
W JSF Komisches Verhalten nach Login per Realm Web Tier 4
M In einer HTML Tabelle positionieren Web Tier 4
I Daten einer Datenbank in ein Formular einfügen Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Popup mit einer Checkbox Auswahlliste Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
M JSF JSP, Facelets und einbinden einer js-Datei Web Tier 2
J JSF Initialisierung einer ApplicationScoped Bean Web Tier 2
J Anzeige einer Hierarchie Web Tier 5
M Exception beim Erstellen einer Query Web Tier 9
N JSF Architektur/Design einer JEE 6 + JSF 2.x Webanwendung mit Subdomänen Web Tier 4
J Performance einer Webanwendung Web Tier 2
V JSF Rendering abhängig von einer Auswahl Web Tier 8
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
X JSP Auslesen der Daten einer Session Web Tier 3
J Servlet Manuelles Rendern einer JSF Datei Web Tier 4
1 JSP Mit Daten einer c:forEach Rechnen ? Web Tier 4
H Seiten-reload als Result einer Action Web Tier 3
N Wie mache ich in einer xhtml (JSF) einen redirect? Web Tier 3
F Prinzipielle Architektur einer Web-Anwendung Web Tier 4
A [JSF 2.0] Ausgabe aus Schleife bzw. einer ArrayList Web Tier 9
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
K Analye einer Seite (Java, JSP, ...) Web Tier 12
I Automatische Weiterleitung JSF mit Aufruf einer Methode Web Tier 2
O Focus auf Textfeld, in letzter Reihe einer dataTable Web Tier 2
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
I Eine Bean von einer anderen Bean aufrufen Web Tier 2
C PanelGrid aus einer Liste Web Tier 3
J JSF: Initialisieren einer Property mit Wert? Web Tier 5
P Struts2 - Mehrere Methoden/Actions in einer Klasse + Validation Web Tier 2
S Attribute einer HttpSession / unchecked cast Web Tier 8
Schandro JSP soll dynamische Anzahl an Parametern einer JavaScript-Function erzeugen Web Tier 8
N Architektur einer Such-Webanwendung Web Tier 4
E Methode einer Bean aus anderer Bean aufrufen Web Tier 10
F Redirect nach Aufruf einer JSP Web Tier 5
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
C navigation auf einer jsp Seite Web Tier 3
pusteblume Mehrere Objekte einer Bean Web Tier 10
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
F Darstellung einer Tabelle mit JSP Web Tier 4
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9

Ähnliche Java Themen

Neue Themen


Oben