mx.com.tutosoftware.cleanservice.dao
Ahora vamos a crear el paquete mx.com.tutosoftware.cleanservice.dao en este paquete creamos la Interface HomeCleanDAOpackage mx.com.tutosoftware.cleanservice.dao; import mx.com.tutosoftware.cleanservice.entity.HomeClean; public interface HomeCleanDAO { public HomeClean obtenerPaqueteHomeClean(); }
A continuación vamos a crear el paquete mx.com.tutosoftware.cleanservice.dao.impl y en este paquete vamos implentar el DAO con la clase HomeDAOImpl
package mx.com.tutosoftware.cleanservice.dao.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import mx.com.tutosoftware.cleanservice.dao.HomeCleanDAO; import mx.com.tutosoftware.cleanservice.entity.HomeClean; import mx.com.tutosoftware.cleanservice.util.HibernateUtil; @Repository public class HomeCleanDAOImpl implements HomeCleanDAO { @Autowired private HibernateUtil hibernateUtil; @Override public HomeClean obtenerPaqueteHomeClean() { // TODO Auto-generated method stub HomeClean hm=new HomeClean(); long id =1; hm = hibernateUtil.fetchById(id,HomeClean.class); return hm; } }
Lo que sigue son los servicios creamos el package mx.com.tutosoftware.cleanservice.service sobre este paquete creamos la interface HomeCleanService
package mx.com.tutosoftware.cleanservice.service; import mx.com.tutosoftware.cleanservice.entity.HomeClean; public interface HomeCleanService { public HomeClean obtenerPaqueteHomeClean(); }
Continuamos con la el paquete de implementación mx.com.tutosoftware.cleanservice.service.impl y en este creamos la clase HomeCleanServiceImpl
package mx.com.tutosoftware.cleanservice.service; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import mx.com.tutosoftware.cleanservice.dao.HomeCleanDAO; import mx.com.tutosoftware.cleanservice.entity.HomeClean; @Service @Transactional public class HomeCleanServiceImpl implements HomeCleanService { @Autowired private HomeCleanDAO homeCleanDAO; @Override public HomeClean obtenerPaqueteHomeClean() { // TODO Auto-generated method stub return homeCleanDAO.obtenerPaqueteHomeClean(); } }
cleanservice-web
Ahora vamos con la parte de la vista nos vamos al modulo cleanservice-web y el archivo pom.xml nos queda de la siguiente manera:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>mx.com.tutosoftware.cleanservice</groupId> <artifactId>cleanservice</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>cleanservice-web</artifactId> <packaging>war</packaging> <name>CleanService Web</name> <build> <finalName>cleanservice</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <webXml>src/main/webapp/WEB-INF/web.xml</webXml> <webResources> <resource> <!-- this is relative to the pom.xml directory --> <directory>src/main/webapp/WEB-INF</directory> <targetPath>WEB-INF</targetPath> </resource> </webResources> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>mx.com.tutosoftware.cleanservice</groupId> <artifactId>cleanservice-core</artifactId> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>com.sun.el</groupId> <artifactId>el-ri</artifactId> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> </dependency> <dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> </dependency> <!-- Spring 4 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> </dependency> <!-- mysql dependencie --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
Ahora vamos a la carpeta src/main/webapp/WEB-INF y creamos el archivo spring-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd"> <!-- support spring annotation --> <context:annotation-config /> <!-- support annotation transaction --> <!-- Specifying base package of the Components like Controller, Service, DAO --> <context:component-scan base-package="mx.com.tutosoftware.cleanservice" /> <!-- Getting Database properties --> <context:property-placeholder location="classpath:application.properties" /> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${database.driverClass}" /> <property name="jdbcUrl" value="${database.url}" /> <property name="user" value="${database.username}" /> <property name="password" value="${database.password}" /> <property name="acquireIncrement" value="${connection.acquireIncrement}" /> <property name="minPoolSize" value="${connection.minPoolSize}" /> <property name="maxPoolSize" value="${connection.maxPoolSize}" /> <property name="maxIdleTime" value="${connection.maxIdleTime}" /> </bean> <!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> </props> </property> <property name="packagesToScan" value="mx.com.tutosoftware.cleanservice.entity"></property> </bean> <!-- Transaction --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>
En src/main/webapp/WEB-INF creamos el archivo faces-config.xml
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> <application> <el-resolver> org.springframework.web.jsf.el.SpringBeanFacesELResolver </el-resolver> </application> </faces-config>
Creamos la conexión con mysql nos vamos a src/main/resources y creamos el archivo application.properties
database.driverClass=com.mysql.jdbc.Driver database.url=jdbc:mysql://localhost:3306/cleanservicedb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC database.username=admin database.password=adminlara #Hibernate related properties hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=true #Connection pool related properties connection.acquireIncrement=2 connection.minPoolSize=20 connection.maxPoolSize=50 connection.maxIdleTime=600
En src/main/java creamos el paquete mx.com.tutosoftware.cleanservice.bean y creamos la clase DashboardView
package mx.com.tutosoftware.cleanservice.bean; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.context.FacesContext; import javax.faces.view.ViewScoped; import org.primefaces.event.CloseEvent; import org.primefaces.event.DashboardReorderEvent; import org.primefaces.event.ToggleEvent; import org.primefaces.model.DashboardColumn; import org.primefaces.model.DashboardModel; import org.primefaces.model.DefaultDashboardColumn; import org.primefaces.model.DefaultDashboardModel; @ManagedBean @ViewScoped public class DashboardView implements Serializable { /** * */ private static final long serialVersionUID = 1L; private DashboardModel model; @PostConstruct public void init() { model = new DefaultDashboardModel(); DashboardColumn column1 = new DefaultDashboardColumn(); DashboardColumn column2 = new DefaultDashboardColumn(); DashboardColumn column3 = new DefaultDashboardColumn(); column1.addWidget("home"); column1.addWidget("sondeo"); column2.addWidget("office"); column3.addWidget("working"); model.addColumn(column1); model.addColumn(column2); model.addColumn(column3); } public void handleReorder(DashboardReorderEvent event) { FacesMessage message = new FacesMessage(); message.setSeverity(FacesMessage.SEVERITY_INFO); message.setSummary("Reordered: " + event.getWidgetId()); message.setDetail("Item index: " + event.getItemIndex() + ", Column index: " + event.getColumnIndex() + ", Sender index: " + event.getSenderColumnIndex()); addMessage(message); } public void handleClose(CloseEvent event) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Panel Closed", "Closed panel id:'" + event.getComponent().getId() + "'"); addMessage(message); } public void handleToggle(ToggleEvent event) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, event.getComponent().getId() + " toggled", "Status:" + event.getVisibility().name()); addMessage(message); } private void addMessage(FacesMessage message) { FacesContext.getCurrentInstance().addMessage(null, message); } public DashboardModel getModel() { return model; } }
En el mismo paquete creamos la clase CotizaHome
package mx.com.tutosoftware.cleanservice.bean; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import org.primefaces.event.FlowEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import mx.com.tutosoftware.cleanservice.entity.HomeClean; import mx.com.tutosoftware.cleanservice.service.HomeCleanService; @ManagedBean @ViewScoped @Component public class CotizaHome implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String tipoVivienda; private String numeroHabitacion; private boolean skip; private String numeroBanos; private String tipoDepartamento; private boolean enable = true; private boolean enableCasa = true; private boolean enableResidencia=true; private boolean requiredDepartamento=true; private boolean requiredCasa=true; private boolean requiredResidencia=true; private String tipoCasa; private String tipoResidencia; private String[] tareas; private double costoTotal; private String costoAproximado; private HomeClean homeClean; @Autowired private HomeCleanService homeCleanService; @PostConstruct public void init() { homeClean = homeCleanService.obtenerPaqueteHomeClean(); } public String getTipoVivienda() { return tipoVivienda; } public void setTipoVivienda(String tipoVivienda) { this.tipoVivienda = tipoVivienda; } public String getNumeroHabitacion() { return numeroHabitacion; } public void setNumeroHabitacion(String numeroHabitacion) { this.numeroHabitacion = numeroHabitacion; } public boolean isSkip() { return skip; } public void setSkip(boolean skip) { this.skip = skip; } public String getNumeroBanos() { return numeroBanos; } public void setNumeroBanos(String numeroBanos) { this.numeroBanos = numeroBanos; } public String getTipoDepartamento() { return tipoDepartamento; } public void setTipoDepartamento(String tipoDepartamento) { this.tipoDepartamento = tipoDepartamento; } public boolean isEnable() { return enable; } public void setEnable(boolean enable) { this.enable = enable; } public boolean isEnableCasa() { return enableCasa; } public void setEnableCasa(boolean enableCasa) { this.enableCasa = enableCasa; } public boolean isEnableResidencia() { return enableResidencia; } public void setEnableResidencia(boolean enableResidencia) { this.enableResidencia = enableResidencia; } public String getTipoCasa() { return tipoCasa; } public void setTipoCasa(String tipoCasa) { this.tipoCasa = tipoCasa; } public String getTipoResidencia() { return tipoResidencia; } public void setTipoResidencia(String tipoResidencia) { this.tipoResidencia = tipoResidencia; } public String[] getTareas() { return tareas; } public void setTareas(String[] tareas) { this.tareas = tareas; } public double getCostoTotal() { return costoTotal; } public void setCostoTotal(double costoTotal) { this.costoTotal = costoTotal; } public String getCostoAproximado() { return costoAproximado; } public void setCostoAproximado(String costoAproximado) { this.costoAproximado = costoAproximado; } public HomeClean getHomeClean() { return homeClean; } public void setHomeClean(HomeClean homeClean) { this.homeClean = homeClean; } public void setHomeCleanService(HomeCleanService homeCleanService) { this.homeCleanService = homeCleanService; } public boolean isRequiredDepartamento() { return requiredDepartamento; } public void setRequiredDepartamento(boolean requiredDepartamento) { this.requiredDepartamento = requiredDepartamento; } public boolean isRequiredCasa() { return requiredCasa; } public void setRequiredCasa(boolean requiredCasa) { this.requiredCasa = requiredCasa; } public boolean isRequiredResidencia() { return requiredResidencia; } public void setRequiredResidencia(boolean requiredResidencia) { this.requiredResidencia = requiredResidencia; } public HomeCleanService getHomeCleanService() { return homeCleanService; } public String onFlowProcess(FlowEvent event) { if(skip) { skip = false; //reset in case user goes back return "confirm"; } else { return event.getNewStep(); } } public void getEnableTipoDaprtamento() { costoAproximado=""; if(tipoVivienda.equals("departamento")) { enable = false; enableCasa = true; enableResidencia=true; } if(tipoVivienda.equals("casa")) { enableCasa = false; enable=true; enableResidencia=true; } if(tipoVivienda.equals("residencia")) { enableResidencia=false; enable=true; enableCasa=true; } } public String cotizar() { costoTotal=0; if(tipoVivienda.equals("departamento")) { costoTotal = costoTotal + homeClean.getDepartamento(); if(tipoDepartamento.equals("Zona Habitacional")) { costoTotal = costoTotal + homeClean.getZonaHabitacional(); } if(tipoDepartamento.equals("Zona Habitacional Residencial o Privada")) { costoTotal = costoTotal + homeClean.getZonaPrivadaDepa(); } if(tipoDepartamento.equals("Edificio")) { costoTotal = costoTotal + homeClean.getEdificio(); } } if(tipoVivienda.equals("casa")) { costoTotal = costoTotal + homeClean.getCasa(); if(tipoCasa.equals("Un piso")) { costoTotal = costoTotal + homeClean.getPiso(); } if(tipoCasa.equals("Dos pisos")) { costoTotal = costoTotal + homeClean.getDosPisos(); } if(tipoCasa.equals("Dos pisos o más")) { costoTotal = costoTotal + homeClean.getMasPisos(); } } if(tipoVivienda.equals("residencia")) { costoTotal = costoTotal + homeClean.getResidencia(); if(tipoResidencia.equals("Privada Peatonal")) { costoTotal = costoTotal + homeClean.getPrivadaAccesoPeatonal(); } if(tipoResidencia.equals("Privada Vehícular")) { costoTotal = costoTotal + homeClean.getPrivadaAccesoVehicular(); } if(tipoResidencia.equals("Acceso Abierto")) { costoTotal = costoTotal + homeClean.getAccesoAbierto(); } } if(numeroHabitacion.equals("uno")) { costoTotal = costoTotal + homeClean.getHabitacion(); } if(numeroHabitacion.equals("dos")) { costoTotal = costoTotal + homeClean.getHabitacion2(); } if(numeroHabitacion.equals("tres")) { costoTotal = costoTotal + homeClean.getHabitacion3(); } if(numeroHabitacion.equals("más de tres")) { costoTotal = costoTotal + homeClean.getHabitacionMas3(); } if(numeroBanos.equals("uno")) { costoTotal = costoTotal + homeClean.getBano1(); } if(numeroBanos.equals("dos")) { costoTotal = costoTotal + homeClean.getBano2(); } if(numeroBanos.equals("tres")) { costoTotal = costoTotal + homeClean.getBano3(); } if(numeroBanos.equals("mas de 3")) { costoTotal = costoTotal + homeClean.getBanoMas3(); } for(int i=0;i<tareas.length;i++) { if(tareas[i].equals("barrer pisos")) { costoTotal = costoTotal + homeClean.getBarrerPisos(); } if(tareas[i].equals("lavar trastes")) { costoTotal = costoTotal + homeClean.getLavarTrastes(); } if(tareas[i].equals("sacudir")) { costoTotal = costoTotal + homeClean.getSacudir(); } if(tareas[i].equals("lavar pisos")) { costoTotal = costoTotal + homeClean.getLavarPisos(); } if(tareas[i].equals("trapear pisos")) { costoTotal = costoTotal + homeClean.getTrapearPisos(); } if(tareas[i].equals("cambiar sabanas")) { costoTotal = costoTotal + homeClean.getCambiarSabanas(); } if(tareas[i].equals("tirar basura")) { costoTotal = costoTotal + homeClean.getTirarBasura(); } } costoAproximado="El costo aproximado de tu servicio es de $"+costoTotal+"MX"; return costoAproximado; } public void getRequiredDepartamento() { if(tipoDepartamento != null) { requiredCasa=false; requiredResidencia=false; tipoCasa=""; tipoResidencia=""; } } public void getRequiredCasa() { if(tipoCasa != null) { requiredDepartamento=false; requiredResidencia=false; tipoDepartamento=""; tipoResidencia=""; } } public void getRequiredResidencia() { if(tipoResidencia != null) { requiredDepartamento=false; requiredCasa=false; tipoDepartamento=""; tipoCasa=""; } } public void resetWizard() { tipoVivienda=""; tipoCasa=""; tipoDepartamento=""; tipoResidencia=""; numeroHabitacion=""; numeroBanos=""; } }
Por último vamos con las vistas creamos en src/main/webapp el archivo index.xhtml
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Cleanig Service Online</title> </h:head> <h:body> <style type="text/css"> .ui-panel, div.ui-state-hover { margin: 10px; width:250px; } .ui-dashboard-column { width:270px; } </style> <p:layout style="min-width:200px;min-height:800px;"> <p:layoutUnit position="west" resizable="true" size="400" minSize="40" maxSize="500"> <h:form> <p:growl> <p:autoUpdate /> </p:growl> <p:panelMenu style="width:300px"> <p:submenu label="Clientes"> <p:menuitem value="Ingresar" /> </p:submenu> <p:submenu label="Admin"> <p:menuitem value="Ingresar" /> </p:submenu> <p:submenu label="Usuario"> <p:menuitem value="Ingresar" /> </p:submenu> <p:submenu label="Quieres trabajar?"> <p:menuitem value="Registrate" /> </p:submenu> </p:panelMenu> </h:form> </p:layoutUnit> <p:layoutUnit position="center"> <h1>Bienvenido</h1> <p>Bienvenido a nuestro servicio en línea de limpieza elige un paquete apropiado a tus necesidades.</p> <div style="height:500px"> <h:form> <p:growl id="msgs" showDetail="true" /> <p:dashboard id="board" model="#{dashboardView.model}"> <p:ajax event="reorder" listener="#{dashboardView.handleReorder}" update="msgs" /> <p:panel id="home" header="Home Clean"> <h:outputText value="Este paquete es ideal para la limpieza de tu departamento,casa habitación o casa residencial." /><br/> <p:linkButton value="Cotizar" outcome="homeCotizador" style="margin-right:20px;"> </p:linkButton> </p:panel> <p:panel id="office" header="Office Clean"> <h:outputText value="Esta paquete esta diseñado para la limpieza de tu despacho, piso de oficinas o inclusive el edificio completo de tus instalaciones." /> <br/> <p:linkButton value="Cotizar" style="margin-right:20px;"></p:linkButton> </p:panel> <p:panel id="sondeo" header="Encuesta 2019"> <h:outputText value="Responde nuestra encuesta sobre los paquetes que ofrecemos y llevate un regalo." /> <br/> <p:linkButton value="Responder" style="margin-right:20px;"> </p:linkButton> </p:panel> <p:panel id="working" header="Working clean"> <h:outputText value="Este paquete es ideal cuando tienes una remodelación, o una construcción y deseas personal que te limpie tu vivienda o construcción." /> <br/> <p:linkButton value="Cotizar" style="margin-right:20px;"> </p:linkButton> </p:panel> </p:dashboard> <div style="clear:both" /> </h:form> </div> </p:layoutUnit> </p:layout> </h:body> </html>
En el mismo directrio creamos el archivo homeCotizador.xhtml
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <title>Paquete Home Clean</title> </h:head> <h:body> <style type="text/css"> .label { width:20%; padding:4px; } .value { width:80%; padding:4px; } .grid { width:100%; } .error { color: red; } .outputLabel { font-weight: bold; } .grid { width:33%; padding:4px; } .ui-datalist ul { padding: 0px 10px 0 20px; margin: 5px 0; } .ui-datalist { margin-bottom: 10px } .ui-noborder tr.ui-widget-content { background: none; } </style> <style type="text/css"> .value { font-weight: bold; } </style> <h:form> <p:breadCrumb> <p:menuitem value="Home" action="index" /> </p:breadCrumb> </h:form> <p:layout style="min-width:200px;min-height:1200px;"> <p:layoutUnit position="center"> <p:fieldset legend="Paquete Home Clean" style="margin-bottom:20px"> <h:panelGrid columns="1" cellpadding="5"> <h:outputText value="En esta paquete se forma por 3 categorías: departamento,casa habitación,casa residencial." /> </h:panelGrid> </p:fieldset> <h:form id="form1"> <p:growl id="growl" sticky="true" showDetail="true"/> <p:wizard flowListener="#{cotizaHome.onFlowProcess}" showNavBar="false" widgetVar="wiz" > <p:tab id="vivienda" title="Tipo Vivienda"> <p:panel header="Categoría"> <p:messages /> <h:panelGrid columns="2" columnClasses="label, value"> <h:outputText value="SeleccionarCategoria:" /> <p:selectOneButton id="tipoVivienda" value="#{cotizaHome.tipoVivienda}" required="true"> <f:selectItem itemLabel="Departamento" itemValue="departamento" /> <f:selectItem itemLabel="Casa Habitación" itemValue="casa" /> <f:selectItem itemLabel="Casa Residencial" itemValue="residencia" /> <p:ajax listener="#{cotizaHome.getEnableTipoDaprtamento}" process="@this,tipoDepartamento,tipoCasa,tipoResidencia,costo" update="tipoDepartamento,tipoCasa,tipoResidencia,costo" ></p:ajax> </p:selectOneButton> <p:outputLabel for="tipoDepartamento" value="Tipo Departamento:" /> <p:selectOneRadio id="tipoDepartamento" value="#{cotizaHome.tipoDepartamento}" unselectable="true" disabled="#{cotizaHome.enable}" required="#{cotizaHome.requiredDepartamento}"> <f:selectItem itemLabel="Zona Habitacional" itemValue="Zona Habitacional" /> <f:selectItem itemLabel="Zona Habitacional Residencial o Privada" itemValue="Zona Habitacional Residencial o Privada" /> <f:selectItem itemLabel="Edificio" itemValue="Edificio" /> <p:ajax listener="#{cotizaHome.getRequiredDepartamento}" process="@this,tipoDepartamento,tipoCasa,tipoResidencia" update="tipoDepartamento,tipoCasa,tipoResidencia" ></p:ajax> </p:selectOneRadio> <p:outputLabel for="tipoCasa" value="Cuantos pisos tiene?:" /> <p:selectOneRadio id="tipoCasa" value="#{cotizaHome.tipoCasa}" unselectable="true" disabled="#{cotizaHome.enableCasa}" required="#{cotizaHome.requiredCasa}"> <f:selectItem itemLabel="Un piso" itemValue="Un piso" /> <f:selectItem itemLabel="Dos pisos" itemValue="Dos pisos" /> <f:selectItem itemLabel="Dos pisos o más" itemValue="Dos pisos o más" /> <p:ajax listener="#{cotizaHome.getRequiredCasa}" process="@this,tipoDepartamento,tipoCasa,tipoResidencia" update="tipoDepartamento,tipoCasa,tipoResidencia" ></p:ajax> </p:selectOneRadio> <p:outputLabel for="tipoResidencia" value="Que tipo de zona resides:" /> <p:selectOneRadio id="tipoResidencia" value="#{cotizaHome.tipoResidencia}" unselectable="true" disabled="#{cotizaHome.enableResidencia}" required="#{cotizaHome.requiredResidencia}" > <f:selectItem itemLabel="Zona privada acceso peatonal" itemValue="Privada Peatonal" /> <f:selectItem itemLabel="Zona privada acceso vehicular" itemValue="Privada Vehícular" /> <f:selectItem itemLabel="Acceso abierto" itemValue="Acceso Abierto" /> <p:ajax listener="#{cotizaHome.getRequiredResidencia}" process="@this,tipoDepartamento,tipoCasa,tipoResidencia" update="tipoDepartamento,tipoCasa,tipoResidencia" ></p:ajax> </p:selectOneRadio> </h:panelGrid> <p:commandButton style="..." value="Siguiente" icon="ui-icon-arrow-1-e" iconPos="left" type="button" onclick="PF('wiz').next()" /> </p:panel> </p:tab> <p:tab id="habitacion" title="Habitaciones"> <p:panel header="Número de habitaciones"> <p:messages /> <h:panelGrid columns="2" columnClasses="label, value"> <h:outputText value="Número de habitaciones:" /> <p:selectOneButton value="#{cotizaHome.numeroHabitacion}" id="numeroHabitacion" required="true" > <f:selectItem itemLabel="1 habitación" itemValue="uno" /> <f:selectItem itemLabel="2 habitaciones" itemValue="dos" /> <f:selectItem itemLabel="3 habitaciones" itemValue="tres" /> <f:selectItem itemLabel="Más de 3 habitaciones" itemValue="más de tres" /> </p:selectOneButton> </h:panelGrid> <p:commandButton style="..." value="Siguiente" icon="ui-icon-arrow-1-e" iconPos="left" type="button" onclick="PF('wiz').next()" /> <p:commandButton style="..." value="Anterior" icon="ui-icon-arrow-1-w" iconPos="right" type="button" onclick="PF('wiz').back()" /> </p:panel> </p:tab> <p:tab id="banos" title="Baños"> <p:panel header="Número de baños"> <p:messages /> <h:panelGrid columns="2" columnClasses="label, value"> <h:outputText value="Número de Baños:" /> <p:selectOneButton value="#{cotizaHome.numeroBanos}" id="numeroBanos" required="true" > <f:selectItem itemLabel="1 baño" itemValue="uno" /> <f:selectItem itemLabel="2 baños" itemValue="dos" /> <f:selectItem itemLabel="3 baños" itemValue="tres" /> <f:selectItem itemLabel="Más de 3 baños" itemValue="mas de 3" /> </p:selectOneButton> </h:panelGrid> <p:commandButton style="..." value="Siguiente" icon="ui-icon-arrow-1-e" iconPos="left" type="button" onclick="PF('wiz').next()" /> <p:commandButton style="..." value="Anterior" icon="ui-icon-arrow-1-w" iconPos="right" type="button" onclick="PF('wiz').back()" /> </p:panel> </p:tab> <p:tab id="tareas1" title="Tareas"> <p:panel header="Seleccionar Tareas a realizar"> <p:messages /> <h:panelGrid columns="2" columnClasses="label, value"> <h:outputText value="Seleccionar Tareas:" /> <p:selectManyCheckbox id="tareas" value="#{cotizaHome.tareas}" layout="grid" columns="3" required="true" > <f:selectItem itemLabel="Barrer pisos" itemValue="barrer pisos" /> <f:selectItem itemLabel="Lavar vidrios interiores" itemValue="lavar vidrios interiores" /> <f:selectItem itemLabel="Lavar trastes" itemValue="lavar trastes" /> <f:selectItem itemLabel="Sacudir" itemValue="sacudir" /> <f:selectItem itemLabel="Lavar pisos" itemValue="lavar pisos" /> <f:selectItem itemLabel="Trapear pisos" itemValue="trapear pisos" /> <f:selectItem itemLabel="Cambiar Sábanas" itemValue="cambiar sabanas" /> <f:selectItem itemLabel="Tirar Basura" itemValue="tirar basura" /> </p:selectManyCheckbox> </h:panelGrid> <p:commandButton style="..." value="Siguiente" icon="ui-icon-arrow-1-e" iconPos="left" type="button" onclick="PF('wiz').next()" /> <p:commandButton style="..." value="Anterior" icon="ui-icon-arrow-1-w" iconPos="right" type="button" onclick="PF('wiz').back()" /> </p:panel> </p:tab> <p:tab id="confirm" title="Confirmación"> <p:panel header="Confirmación"> <h:panelGrid id="confirmation" columns="3" columnClasses="grid,grid,grid"> <h:panelGrid columns="2" columnClasses="label, value"> <h:outputText value="Tipo Vivenda: " /> <h:outputText value="#{cotizaHome.tipoVivienda}" styleClass="outputLabel"/> <h:outputText value="Ubicación Departamento: " /> <h:outputText value="#{cotizaHome.tipoDepartamento}" styleClass="outputLabel"/> <h:outputText value="Pisos de casa habitación: " /> <h:outputText value="#{cotizaHome.tipoCasa}" styleClass="outputLabel"/> <h:outputText value="Ubicación de Residencia: " /> <h:outputText value="#{cotizaHome.tipoResidencia}" styleClass="outputLabel"/> <h:outputText value="Número de Habitaciones: " /> <h:outputText value="#{cotizaHome.numeroHabitacion}" styleClass="outputLabel"/> <h:outputText value="Número de baños: " /> <h:outputText value="#{cotizaHome.numeroBanos}" styleClass="outputLabel"/> </h:panelGrid> <p:dataList value="#{cotizaHome.tareas}" var="tarea"> <f:facet name="header"> Tareas a realizar </f:facet> #{tarea} </p:dataList> </h:panelGrid> <h3> <h:outputText id="costo" value="#{cotizaHome.costoAproximado}" /> </h3> <p:commandButton value="Cotizar" action="#{cotizaHome.cotizar}" update="costo" /> <p:commandButton value="Volver a cotizar" actionListener="#{cotizaHome.resetWizard}" oncomplete="PF('wiz').loadStep('vivienda', false)" /> </p:panel> </p:tab> </p:wizard> </h:form> </p:layoutUnit> </p:layout> </h:body> </html>
Probando el ejemplo
No olvidar que para correr el proyecto es en el modulo cleanservice-web y selecionamos el dashboard que dice HomeClean y presionamos cotizarSeleccionamos el Tipo de vivienda:Departamento
Seleccionamos Zona Habitacional y presionamos Siguiente
Ahora selecionamos dos habitaciones y presionamos siguiente
Seleccionamos 1 baño y presionamos siguiente
Seleccionamos las tareas a realizar y presionamos siguiente
Nos muestra un resumen de lo que seleccionamos y presionamos cotizar
El resultado de nuestra cotización es el siguiente
Presionamos volver a cotizar.
Conclusión
Hasta aquí vamos a dejar el proyecto en esta parte aprendimos a montar una infraestructura Spring,Hibernate,JSF Primefaces con anotaciones, la tabla homeclean fue creada para que cuando construyamos el administrador la empresa cambie los precios del cotizador si necesidad de escribir código,logicamente este es un ejemplo para que aprendas a manejar JSF y primefaces y si lo llagar a realizar paso a paso corrijas algunos errores, modifiques y comprendas, en la parte de wizard hay un pequeño error a la hora de resetear o volver a cotizar la manera de correjirlo es seleccionando un radiobutton y elegir otra opción y volver a seleccionar otro radiobutton según convenga las opciones que desees cotizar, se te queda de tarea corregirlo.Cuando volvamos a publicar mas avances y lleguemos al final del sitio subiremos el código a github pero por lo pronto si tienes tiempo realizalo como va en forma secuencial si tienes dudas manda un corrreo a kapo1978@hotmail.com y si quieres ver el código funcionando puedes concertar una cita en un cafe o en algún espacio público con internet e instalamos el código en tu máquina en la cuidad de México o Estado de México nada mas te cobrariamos el tiempo y el traslado a donde quieras que te llevemos el código todo esto para continuar con la página y realizar mas proyectos.