<h:dataTable> doppelte ausgabe

purzel

Bekanntes Mitglied
Hallo Community,

ich habe (mal wieder) ein Problem! Und zwar verwende ich den <h:dataTable>-Tag und soweit funktioniert auch alles, es wird alles aus der Datenbank als Tabelle augeben. Nun ist aber mein Problem das die Ausgabe doppelt erscheint, also so z.B.:

------------+
ID+Username|
-------------
1 + user1 |
-------------
2 + user2 |
-------------
1 + user1 |
-------------
2 + user2 |
-------------

Weiss da jemand Rat wo evtl. der Fehler liegen könnte? ???:L

Code:

Tabelle.xhtml
Code:
<h:dataTable value="${UsersList.userslist}" var="user" border="0">
    <h:column>
        <f:facet name="header">
            <f:verbatim>ID</f:verbatim>
        </f:facet>
        <h:outputText value="#{user.id}" escape="false"></h:outputText>
    </h:column>
    <h:column>
        <f:facet name="header">
            <f:verbatim>Username</f:verbatim>
        </f:facet>
        <h:outputText value="#{user.username}" escape="false"></h:outputText>
    </h:column>
</h:dataTable>

Userlist.java
Java:
public class userslist {
    /**
     * Datenbank
     */
    final String db_driver = "com.mysql.jdbc.Driver";
    final String db_url = "jdbc:mysql://localhost:****/****";
    final String db_username = "****";
    final String db_password = "****";

    private List userslist = new ArrayList();

    @SuppressWarnings("unchecked")
    public List getUserslist() {
        try{
            Class.forName(db_driver);
            try{
                Connection db = DriverManager.getConnection(db_url, db_username, db_password);

                String selectStatement = "SELECT id, username FROM users";
                PreparedStatement prepStmt = db.prepareStatement(selectStatement);
                ResultSet rs = prepStmt.executeQuery();

                while(rs.next()) {
                    userslist.add(new users(rs.getInt("id"), rs.getString("username")));
                }
                rs.close();
            } catch(Exception db_error) {
                System.out.println(db_error);
            }
        } catch(Exception db_driver_error) {
            System.out.println(db_driver_error);
        }
        return userslist;
    }
}

Users.java
Java:
public class users {
    int id;
    String username;

    public users(int id, String username) {
        this.id = id;
        this.username = username;
    }

    public int getid() {
        return id;
    }

    public String getusername() {
        return username;
    }
}
 

JanHH

Top Contributor
Wenn ich sowas seh, weiss ich wieder warum ich seam benutze ;-). Um den Fehler zu finden würd ich mir mal das ResultSet per System.out.println anzeigen lassen, um zu schauen, ob das wenigstens so aussieht wie man es erwarten würde.

Ansonsten find ich die Benutzung von f:verbatim zur Ausgabe von Texten ziemlich schräg, und die Tatsache dass der schliessende Schrägstrich bei h:eek:utputText nicht direkt im Tag drin ist (also <h:eek:utputText value="Hallo Welt" />). Fällt mir nur so auf grad.
 
Zuletzt bearbeitet:

purzel

Bekanntes Mitglied
Wenn ich sowas seh, weiss ich wieder warum ich seam benutze ;-). Um den Fehler zu finden würd ich mir mal das ResultSet per System.out.println anzeigen lassen, um zu schauen, ob das wenigstens so aussieht wie man es erwarten würde.

Ist Seam ein Web-Framework? Noch nie davon gehört. Und bei der Ausgabe des ResultSet kommt nichts!

Ansonsten find ich die Benutzung von f:verbatim zur Ausgabe von Texten ziemlich schräg, und die Tatsache dass der schliessende Schrägstrich bei h:eek:utputText nicht direkt im Tag drin ist (also <h:eek:utputText value="Hallo Welt" />). Fällt mir nur so auf grad.

Was spricht dagegen? Gibt es gute Gründe, wäre nett wenn Du sie mir nennen könntest.
 

JanHH

Top Contributor
Ne spricht nichts dagegen, ist nur irgendwie unnötig lang.

seam ist ein Framework, welches andere Frameworks integriert (daher der Name, sozusagen eine nahtlose Integration). Seam beinhaltet standardmässig JSF 1.2, JPA 1.0, EJB 3.0 und noch viele andere nette Dinge wiel mail und pdf und JBoss rools / Rollen-/Rechtevergabe und integriert das alles auf sehr harmonische Art und weise. Das noch verbunden mit einem sehr leistungsfähigen DI-Container. Äusserst empfehlenswert (bzw. wenn man einmal mit hatte will man nie mehr ohne ;-) ).
 

purzel

Bekanntes Mitglied
Danke für den Tipp! Werde es mal antesten, hoffe natürlich dass das funktioniert und nicht wie die anderen zahllosen Versuche andere Frameworks zum laufen zu bringen ;)

--------------------

€dit: Durch einen Workaround konnte ich die Tabelle richtig hinbekommen, leider ist es lästig dafür jedesmal diesen Workaround anzuwenden :/

Ich habe einfach als Getter die Anzahl Zeilen ausgelesen und mit rows="anzahlZeilen" gesetzt. Funktioniert zwar ist aber nicht sehr schön und aufwendig!

--------------------

Aber das mit dem Framework werde ich auf jeden Fall mal angehen da ich einige zusätzliche Features brauche die JSF2.0 nicht bietet :D
 
Zuletzt bearbeitet:

JanHH

Top Contributor
An Deinem Code sieht man ja auch, dass Du gar kein JPA benutzt.. also noch ziemlicher Einarbeitungsbedarf, oder? seam ist nicht gerade ohne.. also wenn mans einmal verstanden hat, ist es wunderbar, aber man muss ziemlich viele Vorkenntnisse haben.
 

JanHH

Top Contributor
JPA ist der java-Standard für "ORM", objekt-relationales Mapping. Eine bekannte Implementation davon ist Hibernate. Dabei hilft ein Framework, java-Klassen (die sog. Entites) auf Datenbanktabellen abzubilden, ohne dass man sich mit SQL herumschlagen muss. Annotationen im Quelltext enthalten dabei die notwendigen Meta-Informationen. Als Beispiel die Klasse "UserBean":

Java:
@Entity
public class UserBean
{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private long id;

   private String name, passwd;
    
   ... getter, setter..
}

Ein Objekt dieser Klasse speichert man ganz einfach mit "entityManager.persist(myUserBean);" in der Datenbank. Deine Funktion getUserList sähe so aus:

Java:
public List<UserBean> getUserList()
{
   Query q=entityManager.createQuery("from UserBean");
   return q.getResultList();
}
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben