# JSF-JDBC Verbindung Crud



## Husamoli345 (1. Nov 2020)

Heyhou ich versuche mich grade an einer JSF JDBC Anwendung ein Login Example habe ich auch schon hinbekommen daher gehe ich aus das meine Datenbankverbindung soweit funktioniert leider gibt es bei dem Crud Example ein Problem...vielleicht könnt ihr mir helfen wieso werden die Daten aus der Datenbanktabelle nicht angezeigt ich sehe nur die Überschriften der Tabelle :/ 

Alles läuft auf der Eclipse EE und auf einem Tomcat 8.5 verwendet wird jsf 2.1.7

[CODE lang="java" title="Car.java"]
public class Car {

    private Integer cid;
    private String cname;
    private String color;
    private Integer speed;
    private String mfdctry;

    public Car() {
    }

    public Car(Integer cid, String cname, String color, Integer speed,
            String mfdctry) {
        this.cid = cid;
        this.cname = cname;
        this.color = color;
        this.speed = speed;
        this.mfdctry = mfdctry;
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Integer getSpeed() {
        return speed;
    }

    public void setSpeed(Integer speed) {
        this.speed = speed;
    }

    public String getMfdctry() {
        return mfdctry;
    }

    public void setMfdctry(String mfdctry) {
        this.mfdctry = mfdctry;
    }

}
[/CODE]


[CODE lang="java" title="CarBean.java"]import java.sql.*;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class CarBean  {

    private final String url = "jdbcostgresql://localhost/postgres";
    private final String user ="postgres";
    private final String password ="admin";

    private void connect() {
        try(Connection con = DriverManager.getConnection(url, user, password) {
            if(con != null) {
                System.out.println("Verbunden");
            }else {
                System.out.println("failed to connect");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }



    public List<Car> getCars() throws ClassNotFoundException, SQLException {


        Connection connect = null;

        String url = "jdbcostgresql://localhost/postgres";

        String username = "postgres";
        String password = "admin";

        try {

            Class.forName ("org.postgresql.Driver");

            connect = DriverManager.getConnection(url, username, password);
             System.out.println("Connection established"+connect);

        } catch (SQLException ex) {
            System.out.println("in exec");
            System.out.println(ex.getMessage());
            System.out.println("Verbindung wurde nicht hergestellt");
        }

        List<Car> cars = new ArrayList<Car>();
        PreparedStatement pstmt = connect
                .prepareStatement("select car_id, cname, color, speed, Manufactured_Country from Car");
        ResultSet rs = pstmt.executeQuery();

        while (rs.next()) {

            Car car = new Car();
            car.setCid(rs.getInt("car_id"));
            car.setCname(rs.getString("cname"));
            car.setColor(rs.getString("color"));
            car.setSpeed(rs.getInt("speed"));
            car.setMfdctry(rs.getString("Manufactured_Country"));

            cars.add(car);

        }

        // close resources
        rs.close();
        pstmt.close();
        connect.close();

        return cars;

    }
public static void main(String[] args) {
    CarBean connect = new CarBean();
    connect.connect();


}
}[/CODE]



und meine 
[CODE lang="xml" title="car.xhtml"]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>JSF JDBC Integration</title>

</h:head>
<h:body>
    <h2>Car Details</h2>
    <h:dataTable value="#{carBean.cars}" var="car" border="2">
        <h:column>
            <f:facet name="header">Car ID</f:facet>
         #{car.cid}
      </h:column>
        <h:column>
            <f:facet name="header">Car Name</f:facet>
         #{car.cname}
      </h:column>
        <h:column>
            <f:facet name="header">Car Color</f:facet>
           #{car.color}
       </h:column>
        <h:column>
            <f:facet name="header">Car Speed</f:facet>
           #{car.speed}
       </h:column>
        <h:column>
            <f:facet name="header">Manufactured Country</f:facet>
           #{car.mfdctry}
       </h:column>
    </h:dataTable>
</h:body>
</html>[/CODE]



und die Web.xml 
[CODE lang="xml" title="web.xml"]<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>car.xhtml</welcome-file>
    </welcome-file-list>
</web-app>[/CODE]




Ich weiß leider nichtmehr weiter meine faces-config.xml 
[CODE lang="java" title="faces-config.xml"]<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">

    <navigation-rule>
        <description>StartPage</description>
        <from-view-id>/car.xhtml</from-view-id>
        </navigation-rule>

        </faces-config>[/CODE]


Wie gesagt ich sehe nur die Tabellen der Car.xhtml aber nicht die Einträge aus der Datenbank die verbindung funktioniert aber...ihr wert mir echt eine Hilfe..


----------



## Husamoli345 (2. Nov 2020)

Schade das niemand was weiß...


----------



## kneitzel (2. Nov 2020)

Auf den ersten Blick sieht halt alles korrekt aus. Hast Du mal die Logfiles geprüft, ob da etwas gefunden wird? Hast Du mal ein Logging eingeführt um zu sehen, ob er z,B. die Datenbank abfragt?

Das wären so Ideen, die ich prüfen würde ...

Ansonsten greifst Du mit dem Connection String auf die Datenbank postgres zu. Das ist die Datenbank, die die System Catalogs enthält. In der Regel wird man seine eigene Datenbank erzeugen in der man dann Tabellen und so anlegt. das wäre so das Einzige, das hier noch etwas auffällt bei Deinem Code...


----------



## mihe7 (2. Nov 2020)

Ich würde mal sagen, dass Dir einfach das XHTML-File angezeigt wird, weil das JSF-Servlet nicht greift:


Husamoli345 hat gesagt.:


> <url-pattern>/faces/*</url-pattern>



Änder das mal zu *.xhtml ab.


----------



## Husamoli345 (2. Nov 2020)

Hallo kneitzel ein Login habe ich ausgeführt die Datenbank funktioniert soweit.


----------



## Husamoli345 (2. Nov 2020)

Danke mihe7 für deine Antwort ich werd es sofort probieren.


----------



## mihe7 (2. Nov 2020)

Husamoli345 hat gesagt.:


> Danke mihe7 für deine Antwort ich werd es sofort probieren.


Zur Sicherheit, so war das gemeint:

```
<url-pattern>*.xhtml</url-pattern>
```


----------



## Husamoli345 (2. Nov 2020)

Leider sehe ich immernoch nur die Tabelleneinträge aber nicht die Daten aus der Datenbank :/


----------



## Husamoli345 (2. Nov 2020)

mihe7 hat gesagt.:


> Zur Sicherheit, so war das gemeint:
> 
> ```
> <url-pattern>*.xhtml</url-pattern>
> ```


Hab ich soweit gemacht.


<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>


----------



## kneitzel (2. Nov 2020)

Husamoli345 hat gesagt.:


> Hallo kneitzel ein Login habe ich ausgeführt die Datenbank funktioniert soweit.


Es geht ja nicht um das Logon zur Datenbank. Mit Adminrechten ist das ok - auch zur Datenbank postgres.

Die Fragestellung war: Du hast in der Datenbank postgres die Tabelle Car erzeugt? Üblich ist, dass man eigenständige Datenbanken für ein Projekt anlegt. Aber funktionieren sollte es - wäre aber ggf. ein Punkt, den man prüfen kann, also man kann z.B. im psql machen:
\l listet die Datenbanken auf.
\c <datebank> (also z.B. \c test) wechselt in eine andere Datenbank (im Beispiel in die Datenbank test)
\dt listet die Tabellen der aktuellen Datenbank
Oder man nutzt ein graphisches Frontend Deiner Wahl, falls das einfacher ist.

Und dann halt das einfügen von Log-Meldungen, um mehr Informationen zu bekommen. Ich bin ein Fan von Logs - dann weiß man, ob z.B. der bean überhaupt aufgerufen wurde, was für Datenbank-spezifisch Dinge passiert sind u.s.w. Das war der erste Hinweis - denn dann könntest Du z.B. sagen: Er hat den Bean nie aufgerufen (==> Da wäre der Hinweis von @mihe7 interessant ... Im Augenblick würde mich das wundern, denn mit dem * umfasst Du ja auch das *.xhtml - aber da mag ich mich gerne irren  )

Aber vom Aufbau her ist es ja einfach nur eine Umsetzung von https://www.journaldev.com/7068/jsf-database-example-mysql-jdbc auf postgresql ...


----------



## mihe7 (2. Nov 2020)

kneitzel hat gesagt.:


> denn mit dem * umfasst Du ja auch das *.xhtml - aber da mag ich mich gerne irren


Das Problem ist das /faces/ davor  Er dürfte nicht /car.xhtml sondern müsste /faces/car.xhtml aufrufen.


----------



## Husamoli345 (2. Nov 2020)

omg es funktioniert.....ich musste lediglich in der faces-config  die StartPage von 
<navigation-rule>
        <description>StartPage</description>
        <from-view-id>/car.xhtml</from-view-id>
        </navigation-rule>


statt car.xhtml in index.xhtml und schon funktioniert es.

Danke für eure Hilfe ihr seit Helden für mich


----------



## kneitzel (2. Nov 2020)

mihe7 hat gesagt.:


> Das Problem ist das /faces/ davor  Er dürfte nicht /car.xhtml sondern müsste /faces/car.xhtml aufrufen.


Oh, stimmt. Das hab ich Blindfisch irgendwie übersehen ...


----------



## mihe7 (2. Nov 2020)

kneitzel hat gesagt.:


> Oh, stimmt. Das hab ich Blindfisch irgendwie übersehen ...


Irgendwie sind wir beide blind, oder warum sollte es jetzt plötzlich mit


Husamoli345 hat gesagt.:


> statt car.xhtml in index.xhtml


funktionieren?!?


----------



## Husamoli345 (2. Nov 2020)

Mir fällt grade auf wenn ich car.xhtml schreibe funktioniert es genauso gut wie index.xhtml es lag dann wohl doch an ihrem Einwand statt /faces/    .xhtml zu schreiben vielen dank


----------



## mihe7 (2. Nov 2020)

OK, dann hat es nur @kneitzel mit den Augen


----------

