Buenas tardes compañeros, tras recibir ayuda de otro compañero para solucionar un problema que tenía, me ha venido otro problema relacionado.
Estoy intentando recoger una serie de datos de la DB en MySQL para mostrarlo como un menú horizontal y luego, poder clicar sobre las diferentes opciones para mostrar x/y datos.
El código jsf es el siguiente:
<h:form id="form">
<h:dataTable value="#{controller.menusSeleccion}" var="ms" columnClasses="rutaArchivo, id, title, nombre">
<h:column>
#{ms.nombre}
</h:column>
</h:dataTable>
</h:form>
El controller este:
@SessionScoped
@Named("controller")
public class Controller extends ConexionDB implements Serializable {
private List<MenuSeleccion> menusSeleccion;
@PostConstruct
public void init() {
try {
Statement st = conex.createStatement();
String cadSQL = "select * from menuSeleccion";
rs = st.executeQuery(cadSQL);
menusSeleccion = new ArrayList<MenuSeleccion>();
while(rs.next()){
MenuSeleccion MS = new MenuSeleccion();
MS.setNombre(rs.getString("nombre"));
MS.setId(rs.getInt("id"));
MS.setRutaArchivo(rs.getString("rutaArchivo"));
MS.setTitle(rs.getNString("title"));
//store all data into a List
menusSeleccion.add(MS);
}
}catch (SQLException e) {
System.out.print(e);
} finally {
//conex.close();
}
}
public List<MenuSeleccion> getMenusSeleccion() throws SQLException{
if(menusSeleccion == null){
init();
}
return menusSeleccion;
}
//si sabes que los datos de la base de datos han cambiado invalidas la lista con este método y la próxima vez que la lista sea requerida se volverá a crear:
public void reset(){
menusSeleccion = null;
}
}
El archivo para hacer el List es este, con sus get and set:
@ManagedBean(name = "MenuSeleccion")
@ApplicationScoped
public class MenuSeleccion {
private String nombre, rutaArchivo, title;
private int id;
Y la conexión a la DB esta en otro .java:
public class ConexionDB {
public static final String USERNAME = "root";
public static final String PASSWORD = "";
public static final String HOST = "localhost";
public static final String PORT = "3306";
public static final String DATABASE = "blog";
public static final String CLASSNAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://"+HOST+":"+PORT+"/"+DATABASE;
public static Statement stm;
public static ResultSet rs;
public static Connection conex;
public ConexionDB(){
try {
Class.forName(CLASSNAME);
conex = (Connection) DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
System.out.println("Error"+e);
}
}
public Connection getConex() {
return conex;
}
public static void setConex(Connection conex) {
ConexionDB.conex = conex;
}
public void desconectar() throws SQLException {
if (!conex.isClosed()) {
conex.close();
}
}
}
Al ejecutar el código, me sale que no hay registros encontrados para generar el menú.
No se si es asi como debería hacerlo, si se os ocurre algo mejor, estoy abierto a ideas al igual que si me podéis ayudar a solucionar el problema igual.
Gracias :D