Ejercicios MVC

Contactar con el profesor

Ejercicio – Lista de invitados

Hacer una página web para una lista de invitados con 4 secciones. Una para consultar los invitados, otra para dar de alta un nuevo invitado y otra para darlo de baja.La tabla que usaremos tendrá dos campos: nombre (VARCHAR) e ID (INT, AUTOINCREMENT, PK).

Las operaciones de modificación en la base de datos se harán en una clase llamada Servicio.

Cada uno de los siguientes pantallazos representa una página jsp diferente.

La siguiente etiqueta nos permite enviar información en un formulario sin que dicha información aparezca en la vista.

<input type="hidden" name="action" value="alta"/>

Ejercicio fútbol

La segunda carga una collection de beans de Equipo, y la tercera carga una collection de beans de Jugador en función de un parámetro (EQUIPO_COD) que fue procesado en el controlador.

Pantallazo ejercicio resuelto

Trabajo con fechas

Paso de String a Date:
SimpleDateFormat s = new SimpleDateFormat("dd-MM-yyyy");
Date fecha = s.parse("10-12-1982");
Paso de Date a String:
SimpleDateFormat s = new SimpleDateFormat("dd-MM-yyyy"); 
String fechaAlta = s.format(fecha); //fecha es un objeto de tipo Date
Paso de Date a GregorianCalendar:
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(fecha); //fecha es un objeto de tipo Date
String dia = gc.get(GregorianCalendar.DAY_OF_MONTH);
String mes = gc.get(GregorianCalendar.MONTH)+1;
String anio = gc.get(GregorianCalendar.YEAR);
Construcción de un objeto GregorianCalendar
a partir del día, mes y año por separado
new GregorianCalendar(int year, int month, int dayOfMonth

Nota:
Para pasar de String a GregorianCalendar hay que pasar previamente de String a Date.

Descomposición de una fecha en formato String:
String fecha = "24-07-1982";
String [] fechaSplitada = fecha.split("-");
String dia = fechaSplitada[0];
String mes = fechaSplitada[1];
String anio = fechaSplitada[2];
Etiqueta JSTL para formato de fechas
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<fmt:formatDate pattern="dd-MM-yyyy" value="${fecha_java_util_Date}" />

<fmt:formatDate pattern="dd" value="${fecha_java_util_Date}" />

Hospital

Hospital I

La base de datos tendrá 4 campos: id(PRIMARY KEY, AUTOINCREMENT), nombre (VARCHAR), apellidos (VARCHAR), fecha_alta(DATE).

Para convertir una fecha en un objeto de tipo Date:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date fecha = formatter.parse(stringFecha);

//MM mayúscula, las minúsculas son para minutos.

Estas conversiones las haremos en el controlador (No modificaremos el bean paciente para añadirle las propiedades día, mes y año)

Para modificar la fecha primero convierto el tipo de dato recibido del formulario a un dato de tipo java.util.Date.

Luego, cuando le pase parámetros a la consulta sql convertiré esta fecha un dato de tipo java.sql.Date:

pstmt.setDate(3,new java.sql.Date(fecha.getTime()));
pantallazo ejercicio hospital I

Para que en la página de modificación también podamos eliminar, lo más fácil será tener un segundo formulario, independiente del de modificación, y que ese formulario envie la id del elemento que queremos eliminar como campo oculto (hidden).

Ejercicio listado libros

Descargar ejercicio listado libros resuelto

Ejercicio listado libros I

Pantallazo ejercicio listado libros 1

Ejercicio listado libros II

pantallazo listado libros

Nota:
Pasarle parámetros al action de un formulario directamente en su URL funciona sólo si estamos enviando la información por POST. En caso contrario, la URL que definimos en el action y la que generamos dinámicamente entran en conflicto y los parámetros definidos explícitamente en el action del formulario no son enviados.

<form method="post" action="ServletController?action=alta">

Para programar la opción de agregar un nuevo registro, tenemos dos opciones:

  • Podemos hacer un formulario que abarque sólo las celdas de la fila dónde se encuentra el botón de agregar (esta es la opción más sencilla, pero desde el punto de vista de la validación del código html sería incorrecta).
  • Podemos hacer un formulario que abarque toda la tabla html donde se están mostrando los resultados de la consulta (esta opción es un poco más compleja, pero el código html validaría correctamente).

Ejercicio listado libros III

Pantallazo ejercicio listado libros

Lo más sencillo será utilizar un formulario para cada fila, de tal forma que abarque todas las celdas de cada registro.Esta opción no valida el código html.

Ejercicio listado libros IV

Pantallazo ejercicio listado libros 4

Podemos usar la siguiente función:

function modificar(id){
	document.getElementById("action").value = "modificar";
	document.getElementById("idEnviada").value = id;
	document.getElementById("modifica_titulo").value = document.getElementById("titulo_"+id).value;
	document.getElementById("modifica_precio").value = document.getElementById("precio_"+id).value;
	document.getElementById("formulario").submit();
}

Ejercicio calidades

Pantallazo listado jugadores

Para que las capas amarillas contenidas en la tabla aparezcan alineadas con la parte baja de la misma usaremos el siguiente estilo: <td style=’vertical-align:bottom’>

Como utilizando JSTL y un solo bucle es posible generar la tabla de jugadores de la izquierda y la tabla de calidades de la derecha.

<c:forEach var="jugador" items="${requestScope.jugadores}">
	<tr><td><c:out value="${jugador.numero_camiseta}" /></td><td><c:out value="${jugador.nombre}" /></td></tr>
	<c:set var="fsup">
		${fsup}<td style="vertical-align:bottom;">
		<div style="background-color:yellow; width:20px; height:<c:out value="${jugador.calidad*30}" />px"></div></td>		
	</c:set>
	<c:set var="finf">
		${finf}<td><c:out value="${jugador.numero_camiseta}" /></td>
	</c:set>	
</c:forEach>
Descargar ejercicio calidades resuelto

Ejercicio Login

Si el usuario se loguea con éxito, colocamos un bean del usuario logueado en la sesión. Y redirigimos a la página de ”usuario logueado’. En caso contrario, redirigimos a la página de”se ha producido un error”.

Descargar ejercicio login resuelto
login

Ejercicio Mensajería

ejercicio mensajería
@Entity
public class Usuario {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)//Para generar números autoincrementados
	private int id;
	private String nombre;
	private String pass;
	//Siempre que tengamos una relación OneToMany, usaremos el mappedBy
	@OneToMany(mappedBy = "remitente")
	private List <Mensaje> mensajesEnviados;
	@OneToMany(mappedBy = "destinatario")
	private List <Mensaje> mensajesRecibidos;
@Entity
public class Mensaje {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)//Para generar números autoincrementados
	private int id;
	@ManyToOne
	private Usuario remitente;
	@ManyToOne
	private Usuario destinatario;
	private String mensaje;
mensaje
idremitentedestinatariomensaje
111Hola!
212Qué pasa tron!
311Hola Caracola
412Te odio
usuario
id nombre pass
1 pp kk
2 kk kk
<input type="checkbox" name="arrayDeUsuarios" value="<c:out value="${usuario.id}"/>"/>
String[] arrayDeUsuarios = request.getParameterValues("arrayDeUsuarios");

Ejercicio foro

ejercicio foro
usuario
idnombrepass
1pppp
2kkkk
comentario
id id_usuario id_hilo comentario
1 2 7 es super guay!
2 2 8 En pablomonteserin.com los vendes muy buenos
hilo
idid_usuarionombre_hilotexto_hilo
71Escoger ordenadorDónde comprar uno bueno
81¿Qué opinas de Ubuntu?Dudas sobre Ubuntu
← Proyecto con Maven
Context →

Aviso Legal | Política de privacidad