metodo para llenar datatable jsf

Buen dia;
Estoy comunicando una base de datos con un datatable en jsf, consigo obtener la informacion usando el metodo de coneccion de java como en aplicaciones de escritorio, enfin, utilizo el:

while(rs.next()) {

System.out.println(rs.getString("nombre"));
con1.setNombre(rs.getString("nombre"));
con1.setCelular(rs.getString("celular"));
con1.setDireccion(rs.getString("direccion"));
con1.setCp(rs.getString("cp"));
con1.setEdad(rs.getString("edad"));
con1.setNumerotel(rs.getString("numerotel"));
con1.setColonia(rs.getString("colonia"));
System.out.println(con1.getNombre());
con2.setAdz(con1);
listita.add(con2);

}
con1 es una clase de java dodne tengo puros getter y setters:

public class conecbase1 {
String nombre,edad,cp,numerotel,colonia,direccion,celular;

public String getColonia() {
return colonia;
}

public void setColonia(String colonia) {
this.colonia = colonia;
}

public String getNumerotel() {
return numerotel;
}

public void setNumerotel(String numerotel) {
this.numerotel = numerotel;
}

public String getCelular() {
return celular;
}

public void setCelular(String celular) {
this.celular = celular;
}

public String getCp() {
return cp;
}

public void setCp(String cp) {
this.cp = cp;
}

public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public String getEdad() {
return edad;
}

public void setEdad(String edad) {
this.edad = edad;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
public conecbase1() {
}

}

cada ves que asemos el While(rs.next()) obtengo informacion de un reglon nuevo mientras .next()=true, ahora esta informaciobn la paso al "con1" donde como les dije tengo puros setter y getters despues creo otro elelmento llamado con2 que proviebe de otra clase que tiene solo un parametro, despues lo paso a un objeto lista donde voy colocando la informacion de cada nuevo renglon encontrado en la base de datos segun el query, cuando muestro la base de datos en la tabla me sale solamente el ultimo renglon repetido "n" veces segun lo que regresa la base de datos con el query, ejemplo:

select * from directorio

esto me deve traer 3 renglones, pero me tare:

Ejemplo alimentada por una base de datos

Nombre Direcccion Colonia Telefono Celular Codigo postal Edad
jñl asd asd 2 34324 456 546 345
jñl asd asd 234324 456 546 345
jñl asd asd 234324 456 546 345

como configuro el modo de guardar la informacion en el objeto lista?? para que me salgan los n renglones que deben de ser sin que los repita??

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de cororo

realize la operacion

realize la operacion manualmente, pero no se llena con el resultado del query, necesito crear varios objetos para crear barios objetos, la cree de la siguiente manera MUY vurda pero disculpara no eh encontrado otra forma de hacerlo:

import java.sql.*;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conecbase {

private java.util.Vector listita;
private conecbase1 con1,con3,con4;
private Conecbase2 con2;
ResultSet rs;
Connection cn=null;
int sapo,sapo1;
int i=0;
public Conecbase() {
try {
listita = new Vector();
con1 = new conecbase1();
con3 = new conecbase1();
con4 = new conecbase1();
abrete();
verify();
vel();
cn.close();
} catch (SQLException ex) {
Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
}
}

private void abrete(){

try {
Class.forName("com.mysql.jdbc.Driver").newInstance();

Statement st;
cn= DriverManager.getConnection("jdbc:mysql://localhost/sapo","root","carolina");
st=cn.createStatement();
rs= st.executeQuery("select * from directorio");

} catch (SQLException ex) {

Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {

Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {

Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {

Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
}

}

public Vector getListita() {
return listita;
}

public void setListita(Vector listita) {
this.listita = listita;
}
public void verify(){
for(i=1;i<=10;){
try {
if (rs.absolute(i)) {
}else{
break;
}
i++;
} catch (SQLException ex) {

}
}
}
public void vel(){
sapo = 1;
i--;
for(sapo1=1;sapo1<=i;){
switch (sapo1) {
case 1:
try {
rs.absolute(sapo1);
con1.setNombre(rs.getString("nombre"));
con1.setCelular(rs.getString("celular"));
con1.setDireccion(rs.getString("direccion"));
con1.setCp(rs.getString("cp"));
con1.setEdad(rs.getString("edad"));
con1.setNumerotel(rs.getString("numerotel"));
con1.setColonia(rs.getString("colonia"));
listita.add(con1);
} catch (SQLException ex) {
Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
}
sapo1++;
break;
case 2:
try {
rs.absolute(sapo1);
con3.setNombre(rs.getString("nombre"));
con3.setCelular(rs.getString("celular"));
con3.setDireccion(rs.getString("direccion"));
con3.setCp(rs.getString("cp"));
con3.setEdad(rs.getString("edad"));
con3.setNumerotel(rs.getString("numerotel"));
con3.setColonia(rs.getString("colonia"));
listita.add(con3);
} catch (SQLException ex) {
Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
}
sapo1++;
break;
case 3:
try {
rs.absolute(sapo1);
con4.setNombre(rs.getString("nombre"));
con4.setCelular(rs.getString("celular"));
con4.setDireccion(rs.getString("direccion"));
con4.setCp(rs.getString("cp"));
con4.setEdad(rs.getString("edad"));
con4.setNumerotel(rs.getString("numerotel"));
con4.setColonia(rs.getString("colonia"));
listita.add(con4);
} catch (SQLException ex) {
Logger.getLogger(Conecbase.class.getName()).log(Level.SEVERE, null, ex);
}
sapo1++;
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
}
}

}
}