alguien tiene una idea de como desplegar un menú desde una base de datos en java, estoy usando oracle tengo mi tabla con las opciones del menu y algunos con sus hijos, en mi web un diseño tipo acordeón para el menu y submenu ingresados en duro.
entre Desarrolladores
Recibe ayuda de expertos
Registrate y pregunta
Es gratis y fácil
Recibe respuestas
Respuestas, votos y comentarios
Vota y selecciona respuestas
Recibe puntos, vota y da la solución
Pregunta
1 Respuesta
JDBC
public class Menu {
private String name;
private MenuOption[] options;
}
public interface MenuOptionActionable {
void accion();
}
public class MenuOption {
private String name;
public void accion(MenuOptionActionable actionable) {
actionable.accion();
}
}
public Menu getMenuByName(String name) {
Menu menu;
String sql = "SELECT id_menu, nombre FROM menu WHERE nombre = ?";
try (Connection connection = ConnectionUtil.get();
PreparedStatement pst = connection.prepareStatement(sql)) {
pst.setString(name);
ResultSet rs = pst.executeQuery();
if(rs.next()) {
menu = new Menu(rs.getString("nombre"));
String sql2 = "SELECT nombre FROM menu_option WHERE id_menu = ?";
List<MenuOption> options = new ArrayList<>();
try(PreparedStatement pst2 = connection.prepareStatement(sql)) {
// id del menú para obtener los submenús
pst2.setInt(rs.getInt('id_menu'));
ResultSet rs2 = pst.executeQuery();
while(rs.next()) {
options.add(new MenuOption(rs2.getString("nombre")));
}
}
menu.setOptions(options);
}
} catch(SQLException e) {
logger.severe(e.getMessage());
}
return menu;
}
Por ejemplo, quieres obtiener el submenú 3 del menú "Usuario", que viene a ser "Registrar" y asignarle una acción:
List<Menu> menus = getMenuByName("Usuario");
MenuOption registerOption = menus.getOptions().get(3);
// le asignas una acción
registerOption.action(() -> {
System.out.println("Registrar algo");
});
JPA
Con JPA es mucho más sencillo, solo basta anotar las clases y crear una unidad de persistencia (persistence.xml
):
@Entity
@NamedQuery(name="FindById", query="SELECT c.id, c.name FROM Menu c WHERE c.name = :name");
public class Menu {
@Id @GeneratedValue
private ing id;
private String name;
@OneToMany
private MenuOption[] options;
}
public interface MenuOptionActionable {
void accion();
}
public class MenuOption {
@Id @GeneratedValue
private int id;
private String name;
public void accion(MenuOptionActionable actionable) {
actionable.accion();
}
}
EntityManagerFactory emf = Persistence.createEntityManagerFactory('TU_UNIDAD_PERSISTENCIA');
EntityManager em = emf.createEntityManager();
TypedQuery<Menu> menuUsuario = em.createNamedQuery("FindMenyById");
menuUsuario.setParameter("name", "Usuario");
Menu menu = menuUsuario.getSingleResult();
List<MenuOption> options = menu.getOptions();
MenuOption optionRegistrar = options.get(3);
optionRegistrat.action(() -> {
System.out.println("Registrar algo");
});
Por favor, accede o regístrate para añadir un comentario.
Por favor, accede o regístrate para responder a esta pregunta.
En el blog
-
- 407151
- 1
- Jul 5, 2015
Sin Respuesta
-
- 169
- 0
- Mar 19
-
- 86
- 2
- Feb 26
-
- 1146
- 0
- Nov 7, 2023
-
- 302
- 0
- Sep 19, 2023
-
- 305
- 0
- Ago 21, 2023
-
- 388
- 0
- May 14, 2023
-
- 358
- 0
- Abr 21, 2023
-
- 446
- 0
- Mar 31, 2023
- ver todas
Preguntas relacionadas
- Como trabajar los cambios de base de datos para un proyecto con cambios continuos manejado en ramas
- Reporte en phpword de imagenes desde la Base de datos
- Como mostrar el correo de un usuario en php desde una base de datos
- comparar las horas en java obtenidas desde la base de datos de mysql
- como puedo insertar un detalle de jquery a una base de datos
Actividad Reciente
ArtEze respondió hace 2 días
Alguien sabe, no me ignorenArtEze seleccionó una respuesta hace 2 días
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió hace 2 días
Bajar extensión de Chrome sin actualizar el navega…ArtEze preguntó hace 2 días
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió hace 2 días
No me deja instalar OracleArtEze respondió hace 2 días
Formulario que guarde los datos de un jsonArtEze comentó hace 2 días
Script /boot/ scrapingSantiago2610 comentó Mar 23
Acualizar ChoiceField en djangoSantiago2610 preguntó Mar 19
Acualizar ChoiceField en djangogonzalss preguntó Feb 26
Script /boot/ scraping
Ultimas Preguntas
Preguntas relacionadas
- Como trabajar los cambios de base de datos para un proyecto con cambios continuos manejado en ramas
- Reporte en phpword de imagenes desde la Base de datos
- Como mostrar el correo de un usuario en php desde una base de datos
- comparar las horas en java obtenidas desde la base de datos de mysql
- como puedo insertar un detalle de jquery a una base de datos
Usuarios Top
- Leonardo-Tadei
- 227320 Puntos
- Peter
- 150470 Puntos
- white
- 75880 Puntos
- carlossevi
- 63580 Puntos
- magarzon
- 30650 Puntos
- pregunton
- 20400 Puntos
Todos los Usuarios Usuarios Nuevos
...