Enunciado del ejercicio:
Enunciado:
Diseñar una aplicación Web que posibilite registrar nuevos clientes en un servicio postventa de un
fabricante de objetivos fotográficos. Para ello se solicitará que se rellene un formulario que contiene
los siguientes campos: login, clave, email, nombre del cliente, apellidos del cliente, dirección postal
del cliente, modelo del objetivo adquirido, fecha de compra, nombre de la tienda donde se adquirió y
número de serie del objetivo.
Se validará el formulario. Si el login ya existe se indicará y pedirá uno nuevo. Se valida la clave de
forma que posea entre 8 y 16 caracteres, al menos una letra mayúscula y al menos un dígito.
También se valida el email (debe ser un email válido), la fecha de compra (formato dd/mm/aaaa) y
además no debe ser posterior a la fecha de hoy. Si todo es correcto, se añade la información a la base
de datos y se informa de que el registro ha sido correcto.
La aplicación mostrará inicialmente una página en la que se ofrece al usuario registrarse en el
servicio. Si pulsa el botón de nuevo registro, se procederá a ofrecer el formulario, validarlo e informar
de ello. Si hay errores se mostrará de nuevo el formulario indicando la razón del error. Si no hay
errores, se indicará que todo ha sido correcto.
Nombre del proyecto Eclipse: ApRegistroPostVenta
Contexto raiz: regpostventa
Nombre de la base de datos MySQL: postventa
Se pide: El proyecto Eclipse completo, código fuente java debidamente documentado en Javadoc,
script de creación y rellenado inicial de la base de datos MySQL, diagrama del modelo relacional
creado con WorkBench, archivo WAR (sin contener librería ConectorJ).
Se sube todo comprimido en un archivo denominado PR01-<Primerapellido><SegundoApellido>.[zip|
rar]
Nota: Se supone que la base de datos está en 3 forma normal.
El ejercicio funcionando: http://negrero.no-ip.org:8081/regpostventa/
Planteamiento de la base de datos:
Utilizo cuatro archivos para la web dos clases beans y tres clases pojo de las cuales el peso lo llevan:
registro.jsp y las clases Control y Validador:
registro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
form.elegante input {
padding: .2em;
}
form div {
margin: .4em 0;
}
.pequeño{
width: 22%;
}
.mediano{
width: 22%;
}
.grande{
width: 22%;
}
form div label {
float: left;
}
#contenedor {
width: 700px;
margin: 0 auto;
}
font{
color:red;
font-size:12px;
}
</style>
</head>
<body>
<!-- Mi clases para capturar los datos -->
<jsp:useBean id="usuario" class="pojo.Usuario"></jsp:useBean>
<jsp:useBean id="cliente" class="pojo.Cliente"></jsp:useBean>
<jsp:useBean id="producto" class="pojo.Producto"></jsp:useBean>
<jsp:useBean id="validador" class="beans.Validador"></jsp:useBean>
<!-- Clase que recoge los valores si los datos son correctos como es validar datos -->
<jsp:useBean id="control" class="beans.Control"></jsp:useBean>
<jsp:setProperty property="*" name="usuario"/>
<jsp:setProperty property="*" name="cliente"/>
<jsp:setProperty property="*" name="producto"/>
<jsp:setProperty property="control" name="validador" value="<%=control%>"/>
<%if (request.getParameter("aceptar")!=null){%>
<jsp:setProperty property="usuario" name="control" value="<%= usuario%>"/>
<jsp:setProperty property="cliente" name="control" value="<%=cliente%>"/>
<jsp:setProperty property="producto" name="control" value="<%=producto%>"/>
<jsp:setProperty property="aceptar" name="control" value='<%=request.getParameter("aceptar")%>'/>
<%} %>
<div id="contenedor" >
<form action="registro.jsp">
<fieldset>
<legend>Datos de usuario</legend>
<div>
<!--
Exlicacion de la validacion de los campos de formulario:
value=si no es null(=null primera vez, al cargar la pagina) no muestra el valor null pero sino muestra el valor que tenia anterior
<font> Entre las etiquetas font pregunto si se ha pulsado aceptar(primera vez) y despues pregunto si es valido
a partir de un patron dado, si no es valido mensaje de error
-->
<label for="login" class="pequeño">Login:</label>
<input type="text" name="login" size="15"
value="<%if (usuario.getLogin()!=null){ %><jsp:getProperty property='login' name='usuario'/><%}%>"
maxlength="15" /> <font ><jsp:getProperty property="validarLogin" name="validador"/></font>
</div>
<div>
<label for="clave"class="pequeño">Clave:</label>
<input type="password" maxlength="16" name="clave"
value="<%if (usuario.getClave()!=null){ %><jsp:getProperty property='clave' name='usuario'/><%}%>"
size="16" /> <font><jsp:getProperty property="validarClave" name="validador"/></font>
</div>
<div>
<label for="email" class="pequeño">Email:</label> <input
type="email" name="email"
value="<%if (usuario.getEmail()!=null){ %><jsp:getProperty property='email' name='usuario'/><%}%>"
size="30" maxlength="30" /> <font><jsp:getProperty property="validarEmail" name="validador"/></font>
</div>
</fieldset>
<fieldset>
<legend>Datos de cliente</legend>
<div>
<label for="nombre"class="mediano">Nombre:</label>
<input type="text" max="15" maxlength="15" name="nombre"
value="<%if (cliente.getNombre()!=null){ %><jsp:getProperty property='nombre' name='cliente'/><%}%>"/>
<font><jsp:getProperty property="validarNombre" name="validador"/></font>
</div>
<div>
<label for="apellidos"class="mediano">Apellidos:</label>
<input type="text" max="30" maxlength="30" name="apellidos"
value="<%if (cliente.getApellidos()!=null){ %><jsp:getProperty property='apellidos' name='cliente'/><%}%>"/>
<font><jsp:getProperty property="validarApellidos" name="validador"/></font>
</div>
<div>
<label for="direccion"class="mediano">Direccion:</label>
<input type="text" size="30" maxlength="50" name="direccion"
value="<%if (cliente.getDireccion()!=null){ %><jsp:getProperty property='direccion' name='cliente'/><%}%>"/>
<font><jsp:getProperty property="validarNombre" name="validador"/></font>
</div>
</fieldset>
<fieldset>
<legend>Datos del Producto</legend>
<div>
<label for="objetivo"class="grande">Modelo objetivo:</label>
<input type="text" size="15" maxlength="15" name="objetivo"
value="<%if (producto.getObjetivo()!=null){ %><jsp:getProperty property='objetivo' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarObjetivo" name="validador"/></font>
</div>
<div>
<label for="fecha" class="grande">Fecha de compra:</label>
<input type="text" name="fecha"
value="<%if (producto.getFecha()!=null){ %><jsp:getProperty property='fecha' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarFecha" name="validador"/></font>
</div>
<div>
<label for="tienda" class="grande">Nombre de la tienda:</label>
<input type="text" size="30" maxlength="30" name="tienda"
value="<%if (producto.getTienda()!=null){ %><jsp:getProperty property='tienda' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarTienda" name="validador"/></font>
</div>
<div>
<label for="serie" class="grande">Nº de serie del objetivo:</label>
<input type="number" name="nserie" size="5" maxlength="5"
value="<%if (producto.getNserie()!=null){ %><jsp:getProperty property='nserie' name='producto'/><%}%>"/>
<font><jsp:getProperty property="validarNserie" name="validador"/></font>
</div>
</fieldset>
<fieldset>
<div>
<input type="submit" value="Aceptar" name="aceptar"/>
</div>
</fieldset>
<%if (request.getParameter("aceptar")!=null){
if (control.getGrabar()){%>
<jsp:forward page="grabado.html"></jsp:forward>
<%
}else{
out.write("<font>Error al grabar los datos</font");
}
}
%>
</form>
</div>
</body>
</body>
</html>
Validador.java
package beans;
import java.io.Serializable;
/**
* @author Andres Carmona gil
* Clase que encapsula las validaciones de los datos del formulario
* a la cual se le pasa los datos a traves de la clase Control
*
*/
@SuppressWarnings("serial")
public class Validador implements Serializable {
/**
* Clase control que recibe los datos del formulario
*/
private Control control=null;
public Validador(){
}
/**
* Retorna la clase control
* @return the control
*/
public Control getControl() {
return control;
}
/**
* Le pasamos la clase control
* @param control the control to set
*/
public void setControl(Control control) {
this.control = control;
}
/**
* Devuelve un String con el error si no es valido el login:
* esta vacio el campo o si el login existe ya en la base de datos
* @return String error
*/
public String getValidarLogin(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getUsuario().getLogin()==null){
error="<-- Usuario requerido no puede estar vacio) ";
}else{
if (control.getExisteLogin()){
error="<--Nombre de usuario ya existe";
}
}
}
return error;
}
/**
* Devuelve un String con el error si no es valida la clave segun patron
* o el campo esta vacio
* @return String error
*/
public String getValidarClave(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getUsuario().getClave()==null ||
!control.validar(control.getUsuario().getClave(), "patronClave")){
error="<-- Clave requerida(8-15 caracteres al menos un digito y una mayuscula)";
}
}
return error;
}
/**
* Devuelve un String con el error si no es valida la email segun patron
* o el campo esta vacio
* @return String error
*/
public String getValidarEmail(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getUsuario().getEmail()==null ||
!control.validar(control.getUsuario().getEmail(), "patronEmail")){
error="<-- Email requerido o mal escrito(nombre@compañia.com)";
}
}
return error;
}
/**
* Devuelve un String con el error si el nombre del cliente esta vacio
* @return String error
*/
public String getValidarNombre(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getCliente().getNombre()==null){
error="<-- Nombre requerido no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si el apellidos del cliente esta vacio
* @return String error
*/
public String getValidarApellidos(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getCliente().getApellidos()==null){
error="<-- Apellidos requerido no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si el direccion del cliente esta vacio
* @return String error
*/
public String getValidarDireccion(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getCliente().getDireccion()==null){
error="<-- Direccion requerida no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si el nombre del objetivo esta vacio
* @return String error
*/
public String getValidarObjetivo(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getProducto().getObjetivo()==null){
error="<--Nombre objetivo requerido no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si la fecha de compra del objetivo no es valida
* segun patron (dd/mm/yyyy) y no es posterior a hoy
* @return String error
*/
public String getValidarFecha(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (!control.validar(control.getProducto().getFecha(),"patronFecha")){
error="<-- Fecha requerida o no valida(dd/mm/aaaa)";
}else{
if (control.getFecha()){
error="<-- la fecha tiene que ser anterior a la de hoy";
}
}
}
return error;
}
/**
* Devuelve un String con el error si el nombre de la tienda esta vacia
* @return String error
*/
public String getValidarTienda(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getProducto().getTienda()==null){
error="<--Nombre tienda requerido no puede estar vacio";
}
}
return error;
}
/**
* Devuelve un String con el error si el numero de serie no es un numero con el patron numero
* @return String error
*/
public String getValidarNserie(){
String error="";
if(control.getAceptar()!=null && control!=null){
if (control.getProducto().getNserie()==null ||
control.validar(control.getProducto().getNserie(), "patronNumero")){
error="<-- Numero de serie no puede estar vacio o no es valido";
}
}
return error;
}
}