55
Capítulo 2. Crear aplicación Web Modelo General Desarrollo de una aplicacion Web Dependencias Maven Usando el Asistente Maven del IDE Editar el archivo pom.xml MODELO DESARROLLO JPA Proceder a Crear los Entity con NetBeans Creación de los EJB CDI vs ManagedBeans CREAR UN CDI PARA EL MANEJO DE MENSAJES Código completo del CDI JSFUtil.java FACELETS CREAR PLANTILLA FACELETS CON <p:layout> de PRIMEFACES Código completo de template.xhtml Editar template.xhtml Crear la página Index.xhtml CREAR CDI BEANS ESTATUSCONTROLLER.java Crear los Facelets Template Client para insertar Estatus Editar el entity Estatus.java Editar EstatusFacade.java Convertidores Crear EstatusConverter.java 1

Crear aplicación Web en java y netbeans

  • Upload
    chinuez

  • View
    59

  • Download
    3

Embed Size (px)

DESCRIPTION

como crear una aplicacion wen con java implementando JPA

Citation preview

  • Captulo2.CrearaplicacinWeb

    ModeloGeneralDesarrollodeunaaplicacionWeb

    DependenciasMavenUsandoelAsistenteMavendelIDEEditarelarchivopom.xml

    MODELODESARROLLOJPA

    ProcederaCrearlosEntityconNetBeansCreacindelosEJBCDIvsManagedBeansCREARUNCDIPARAELMANEJODEMENSAJESCdigocompletodelCDIJSFUtil.java

    FACELETSCREARPLANTILLAFACELETSCONdePRIMEFACESCdigocompletodetemplate.xhtmlEditartemplate.xhtmlCrearlapginaIndex.xhtml

    CREARCDIBEANSESTATUSCONTROLLER.javaCrearlosFaceletsTemplateClientparainsertarEstatusEditarelentityEstatus.javaEditarEstatusFacade.javaConvertidores

    CrearEstatusConverter.java

    1

  • Modelo General

    2

  • 3

  • DesarrollodeunaaplicacionWebEstecaptulomuestraeldesarrollodelaaplicacindeejemplodeScrumusando

    tecnologasJEE7.EstaaplicacinpermitirinsertarregistrosenunatablautilizandoJPA,primefaces/JavaServerFaces,EJB,CDI.Paraelloutilizamos:

    NetBeansIDE8.0.1 Maven(comopartedelIDE) GlassFish4.1 BasededatosMySQL

    1.CrearunproyectoMavenWebApplicationdesdeNetBeans:

    2.IndicarProjectName:scrumwebGroupid:com.avbravo(Eselgrupodeproyectosalquepertenecenuestroproyecto)

    4

  • EnSettings,seleccionamosGlassFishServer4.1.yenJavaEEVersion7

    ElIDEgeneralaestructuradelproyecto:

    Ahora,vamosaseleccionarProjectsPropertiesConfigurationsConfigurations:ypresionarelbotnActivate.

    HacemosclicenlacategoraFrameworks

    5

  • HacerclicelbotnAdd,yluegoseleccionarJavaServerFaces

    EnlapestaaConfigurationverificarqueestseleccionadolaopcinFaceletsenlaopcinPreferredLanguage:

    yenlapestaaComponentsseleccionamosPrimefaces

    6

  • DependenciasMavenMavenconstaderepositoriosdondeseencuentranlasdependencias(bibliotecas.jar)

    necesariasparaejecutarnuestrosproyectos.Laventajaqueofreceesquenoesnecesariodescargarmanualmenteestasdependencias.SimplementeMavenseencargadebuscarlasyenlosrepositoriosynospermiteagregarlasfacilmente.Siunabibliotecadependedeotra,Mavenseencargaragregarestasdependenciasanuestroproyecto.Paranuestraaplicacinwebutilizaremoslassiguientesdependencias:

    primefacesallthemes mysql primefaces itext jasperreports jfreechart

    NetBeansnosofrecedosalternativaspararealizarlo:laprimeramedianteelasistenteylasegundaeditandoelarchivopom.xmlqueencontramosenProjectFiles.

    UsandoelAsistenteMavendelIDEUsaremoslaalternativadelasistentedelIDE.Paraello,enelnodoDependencieshacerclicderechoyseleccionarAddDependency...

    EneldilogoAddDependencyescribiremosenelcampoQueryladependenciaabuscarypresionamoslateclaIntro.Enesemomentosemostrarunlistadoconlasdependenciaslocalesyremotasyseleccionamoslaquedeseamosdelalista.

    Paraprimefacesallthemes(Permitemanejarlostemasdeprimefaces)

    7

  • Dependenciamysqlconnectorjava(Paramanejarlacomunicacinconmysql)

    Actualizamoslaversindeprimefacesa5.1(ltimaversindeprimefacescommunityalmomentodeescribirestelibro)

    8

  • Dependenciaitext(Utilizadoparareportes)

    Dependenciajasperreports(Utilizadoparareportes)

    9

  • Dependenciajfreechart(Generacindegrficas)

    Editarelarchivopom.xmlLasegundaalternativaeseditarelarchivopom.xmlubicadoenProjectFiles

    Podemosescribirdirectamenteladependencia,odarclicderechoInsertCodeDependency.Mostrareldilogoparabuscardependencias.

    10

  • Enelarchivopom.xmlingresamosdirectamenteladependenciaindicandoelgroupId(generalmenteeslaorganizacinoempresaquedesarrolla),artifactId(nombredeljar),versin(nmerodeversin)org.primefacesprimefaces5.1commonsfileuploadcommonsfileupload1.3org.primefaces.extensionsallthemes1.0.8mysqlmysqlconnectorjava5.1.26com.lowagieitext2.1.7net.sf.jasperreportsjasperreports5.2.0

    11

  • jfreejfreechart1.0.13javaxjavaeewebapi7.0providedyenrepositoriesagregarhttp://repository.primefaces.org/PrimeFacesmavenlibdefaultRepositoryforlibraryPrimeFacesmavenlib

    12

  • Alterminardeagregarlasdependencias,hacerclicderechosobreelconodelproyecto,yseleccionamosBuildwithDependenciesparadescargarlasdependenciasdelproyectoMaven.

    Seobservaunlistadodedependencias

    13

  • MODELODESARROLLO JavaServerFacesofreceunmecanismosencilloparaeldesarrollodeinterfacesde

    usuarioweb,elmodeloserdivididoentrescapas(CapaWeb,CapaNegocio,CapadeDatos),

    14

  • ParapodermanejarlabasededatosMySQLdesdeNetBeansIDE,seagregalabasededatosdesdelapestaaServicesDatabasesDriversMySQL

    Indicarelnombredelabasededatoselusuarioypassword,ypresionarelbotnTestConnection,paracomprobarquelaconexinalabasededatosseaexitosa.

    NetBeansIDEnosofreceunpotenteeditordeconsultasyoperacionessobrelabasededatos.

    Nota:Desdeestepanelpodemosconectarnosacualquierbasededatos,decualquiertipo,siempreycuandocontemosconelcontroladorJDBC.

    15

  • JPAELORM(ObjectRelationalMapping),predeterminadoenJEE7esJPA,queofreceun

    mecanismosencillodemanejoderegistrosdelastablasysuequivalenteenclasesenJava.GeneralmentePOJOs(PlainOldJavaObject),quesedenominanEntity,yaqueadiferenciadeunobjetoJavatradicional,elEntitypermitequeelvalordesusatributosseaalmacenadopermanentementeenlabasededatos.

    LosEntityofrecenunaseriedeatributosyanotacionesquefacilitanelmanejodelos

    mismos,aprovechandolasventajasdelaplataformaJavaEE7.

    ProcederaCrearlosEntityconNetBeans DesdemenFile,seleccioneNew enCategories,seleccionePersistence enFileTypes,seleccioneEntityClassesfromDataBase

    Luego,sinoexisteeljdbc/scrumwebprocedemosacrearelDataSourceparanuestraaplicacin,paraelloseleccionaremosNewDataSource...

    16

  • Seguidamente,indicamoselnombreJNDIquevamosautilizar.Ennuestrocaso,usaremos:jdbc/scrumweb

    Deahoraenadelante,cadavezquequeramosreferirnosalabasededatos,loharemosusandoJNDI.SeleccionamosDataSourceelnombreJNDIquedeseamoscrearjdbc/scrumwebContinuamosconelasistente,ycuandonospreguntequetablasvamosaimportar(AvailableTables):

    Ycomoqueremosimportartodaslastablas,hacemosclicenAddAll

    17

  • Notaremosquealgunosnombresdetablassepresentarnencolorgrisestassonlasquedependendeotrastablas,porquetienenunaclavefornea,yesnecesariaimportarlaparaquelatablaprincipalpuedafuncionar.Continuamosconelasistente.EneldilogoEntityClasses,muestralascolumnasconelnombredelatabla,clasesytipodegeneracin.

    EneldilogoMappingOptions,dejamoslosvalorespredeterminadosenelcampoCollectionTypeconelvalorjava.util.CollectionypresionamoselbotnFinalizar

    18

  • SeiniciaralageneracindelosEntity,enbasealanlisisdelastablas.

    EnlaimagenpodrapreciarlosEntitygenerados,cadaunocorrespondeaunatabladelabasededatos

    NosubicamosenOtherSources/src/main/resourcesydarclicderechosobrepersistence.xml,seleccionarOpen.

    19

  • semuestralaconfiguracindelarchivopersistence.xml,ycomprobarqueDataSource:muestrajdbc/scrumweb

    sidamosclicenlapestaaSource,podemosobservarlaconfiguracin.jdbc/scrumwebfalse

    CreacindelosEJBLosEnterpriseJavaBeanssonclasesespecialesenJavaqueseejecutanenelContenedorJavaEE.Enestoscomponentesseestablecelalgicadenegocioparanuestrasaplicaciones.Estonospermitesepararlimpiamentelalgicadenegocio,delavistaydelacapadedatos.NetBeansnospermitecrearestosEJBconelmodeloCRUD(CreateReadUpdateDelete)paranuestrasEntitiesdeunamaneramuyrpidadelasiguientemanera.

    DesdemenFile,seleccioneNew enCategories,seleccioneEnterpriseJavaBeans enFileTypes,seleccioneSessionBeansForEntityClasses

    20

  • SeleccionardelalistaAvailableEntityClassesypresionarelbotnAddAll>>paragenerartodoslosEJBparanuestrasentidades.

    EneldialogoGeneratedSessionBeans,indicarelcampoPackagecom.avbravo.scrumweb.ejb(Paraalmacenarenesepaquetelosejbquesegeneren)ypresionarelbotnFinalizar

    21

  • Secreanenelpaquetecom.avbravo.scrumweb.ejblosEJBAbstractFacade.javayunEJBparacadaEntityseleccionado.

    22

  • CDIvsManagedBeansJEE7 utilizapordefectoCDIenlugardeManagedBeans,yaqueestosestanms

    integradosconlaplataformaypermitenlainyeccindedependencias.

    Parautilizarladebemosimportarelpaquetejavax.enterprise.contextydebenimplementarlainterfazSerializableparalosSessionScoped.porejemploimportjavax.annotation.ManagedBeanimportjavax.enterprise.context.SessionScopedlospaquetesquecorrespondenaManagedBeansyanoseusarnimportjavax.faces.bean.ManagedBeanimportjavax.faces.bean.SessionScopedCDIdefinelosalcances

    @ApplicationScoped:Semantienedurantetodalaejecucindelaaplicacion. @SessionScoped:Semantienedurantelasesiondeununicousuario. @RequestScoped:CorrespondeaunaunicasolicitudHTTPolainvocacindeun

    mtodo.Elbeanssolopersistemientraselmtodoesinvocado.

    @ConversationScoped:Semantieneentremultiplesinvocaciones. @Dependent:Eselmismocicloqueeldeuncliente.Unbeandependiente

    escreadocadavezqueseinyectaylareferenciaesremovidacuandolainyeccinesremovida.

    Utilizamoslaanotacin@Namedparahacerreferenciadesdelaspginasxhtml,seutilizalasiguienteestandarizacin:sielCDIsellamaJSFUtilyseutiliza@NamedesteseusarenlaspginasxhtmlcomojSFUtil,conlaprimeraletraenminsculas.

    23

  • CREARUNCDIPARAELMANEJODEMENSAJES1.CrearelCDIJSFUtil

    DesdemenFile,seleccioneNew enCategories,seleccioneJavaServerFaces enFileTypes,seleccioneJSFManagedBeans ClassName:JSFUtil Packagecom.avbravo.scrumweb.generales Scope:request

    SepermiteseleccionarelScope(Alcance)enesteejemploutilizamosrequest,indicarelpaquetegeneralesdondesealmacenar.CdigogeneradoporelIDE

    24

  • Seprocedeaeliminarlaanotacin@ManagedBeanyserreemplazadapor@Named,laimportacinjavax.faces.bean.ManagedBeanyjavax.faces.bean.RequestScopedsedebeneliminar.YaqueestasendepreciadasparausarensulugarCDI.

    DarClicderecho>Fiximportyseleccionarjavax.inject.Namedyjavax.enterprise.context.RequestScoped

    25

  • Semostrarelcdigodelasiguientemanera:packagecom.avbravo.scrumweb.generalesimportjava.io.Serializableimportjavax.enterprise.context.RequestScopedimportjavax.inject.Named/****@authoravbravo*/@Named@RequestScopedpublicclassJSFUtil{/***CreatesanewinstanceofJSFUtil*/publicJSFUtil(){}}Enelcdigousaremosmtodosparaenviarmensajesaloscomponentesy,ytambienseusaraparadesplegardilogosutilizandoDialogFramework.PorejemploelmtodoaddSuccessMessage()actualizaelydelapaginaxhtml.

    26

  • MientraselmtodoinfoDialog()muestranundilogoconlosmensajesutilizandoDialogFrameworkdePrimefacesimplementadoenlaversin4.0,ynoactualizanidelapaginaxhtml.

    CdigocompletodelCDIJSFUtil.javaimportjava.util.ArrayListimportjava.util.Calendarimportjava.util.Dateimportjava.util.Iteratorimportjava.util.Listimportjava.util.Mapimportjava.util.TreeMapimportjavax.enterprise.context.RequestScopedimportjavax.faces.application.FacesMessageimportjavax.faces.component.UIComponentimportjavax.faces.component.UIInputimportjavax.faces.component.UISelectItemimportjavax.faces.context.FacesContextimportjavax.faces.convert.Converterimportjavax.faces.model.SelectItemimportjavax.inject.Namedimportjavax.servlet.http.HttpSessionimportorg.primefaces.context.RequestContext/****@authoravbravo*/@Named@RequestScopedpublicclassJSFUtil{ publicstaticSelectItem[]getSelectItems(Listentities,booleanselectOne){intsize=selectOne?entities.size()+1:entities.size()SelectItem[]items=newSelectItem[size]inti=0

    27

  • if(selectOne){items[0]=newSelectItem("","")i++}for(Objectx:entities){items[i++]=newSelectItem(x,x.toString())}returnitems}/**logout*/publicStringlogout(){HttpSessionsession=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false)if(session!=null){session.invalidate()}return"/index"}publicstaticvoidaddErrorMessage(Exceptionex,StringdefaultMsg){Stringmsg=ex.getLocalizedMessage()if(msg!=null&&msg.length()>0){addErrorMessage(msg)}else{addErrorMessage(defaultMsg)}}publicstaticvoidaddErrorMessages(Listmessages){for(Stringmessage:messages){addErrorMessage(message)}}publicstaticvoidaddErrorMessage(Stringmsg){FacesMessagefacesMsg=newFacesMessage(FacesMessage.SEVERITY_ERROR,msg,msg)FacesContext.getCurrentInstance().addMessage(null,facesMsg)}publicstaticvoidtestMessage(Stringmsg){FacesMessagefacesMsg=newFacesMessage(FacesMessage.SEVERITY_ERROR,msg,msg)FacesContext.getCurrentInstance().addMessage(null,facesMsg)}

    28

  • publicstaticvoidaddSuccessMessage(Stringmsg){FacesMessagefacesMsg=newFacesMessage(FacesMessage.SEVERITY_INFO,msg,msg)FacesContext.getCurrentInstance().addMessage("successInfo",facesMsg)}publicstaticvoidaddWarningMessage(Stringmsg){FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_WARN,msg,""))}publicstaticvoidaddFatalMessage(Stringmsg){FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_FATAL,msg,""))}publicstaticStringgetRequestParameter(Stringkey){returnFacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key)}publicstaticObjectgetObjectFromRequestParameter(StringrequestParameterName,Converterconverter,UIComponentcomponent){StringtheId=JSFUtil.getRequestParameter(requestParameterName)returnconverter.getAsObject(FacesContext.getCurrentInstance(),component,theId)}publicstaticvoidinfoDialog(Stringtitulo,Stringtexto){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_INFO,titulo,texto)RequestContext.getCurrentInstance().showMessageInDialog(message)}publicstaticvoidwarningDialog(Stringtitulo,Stringtexto){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_WARN,titulo,texto)RequestContext.getCurrentInstance().showMessageInDialog(message)}publicstaticvoidfatalDialog(Stringtitulo,Stringtexto){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_FATAL,titulo,texto)RequestContext.getCurrentInstance().showMessageInDialog(message)}publicstaticvoiderrorDialog(Stringtitulo,Stringtexto){FacesMessagemessage=newFacesMessage(FacesMessage.SEVERITY_ERROR,titulo,texto)RequestContext.getCurrentInstance().showMessageInDialog(message)

    29

  • }publicstaticjava.sql.DateconverterDate(java.util.Datefecha){try{longlfecha=fecha.getTime()java.sql.Datedtfecha=newjava.sql.Date(lfecha)returndtfecha}catch(Exceptione){addErrorMessage("converterDate()"+e.getLocalizedMessage())}returnnull}publicstaticjava.util.DategetFechaActual(){java.util.Calendarca=java.util.Calendar.getInstance()java.sql.Datemydate=newjava.sql.Date(ca.getTimeInMillis())returnnewjava.sql.Date(mydate.getTime())}publicstaticIntegergetAnioActual(){java.util.Calendarca=java.util.Calendar.getInstance()java.sql.Datemydate=newjava.sql.Date(ca.getTimeInMillis())returnca.get(Calendar.YEAR)}publicstaticIntegergetMesActual(){java.util.Calendarca=java.util.Calendar.getInstance()java.sql.Datemydate=newjava.sql.Date(ca.getTimeInMillis())returnca.get(Calendar.MONTH)}publicstaticIntegergetMesDeUnaFecha(Datedate){Calendarcalendar=Calendar.getInstance()calendar.setTime(date)intanio=calendar.get(Calendar.YEAR)intmes=calendar.get(Calendar.MONTH)+1intdia=calendar.get(Calendar.DAY_OF_MONTH)returnmes}publicstaticIntegergetAnioDeUnaFecha(Datedate){Calendarcalendar=Calendar.getInstance()calendar.setTime(date)intanio=calendar.get(Calendar.YEAR)intmes=calendar.get(Calendar.MONTH)+1intdia=calendar.get(Calendar.DAY_OF_MONTH)

    30

  • returnanio}publicstaticIntegergetDiaDeUnaFecha(Datedate){Calendarcalendar=Calendar.getInstance()calendar.setTime(date)intanio=calendar.get(Calendar.YEAR)intmes=calendar.get(Calendar.MONTH)+1intdia=calendar.get(Calendar.DAY_OF_MONTH)returndia}publicstaticIntegergetDiaActual(){java.util.Calendarca=java.util.Calendar.getInstance()java.sql.Datemydate=newjava.sql.Date(ca.getTimeInMillis())returnca.get(Calendar.DATE)}publicstaticbooleanisValidationFailed(){returnFacesContext.getCurrentInstance().isValidationFailed()}publicstaticbooleanisDummySelectItem(UIComponentcomponent,Stringvalue){for(UIComponentchildren:component.getChildren()){if(childreninstanceofUISelectItem){UISelectItemitem=(UISelectItem)childrenif(item.getItemValue()==null&&item.getItemLabel().equals(value)){returntrue}break}}returnfalse}publicstaticStringgetComponentMessages(StringclientComponent,StringdefaultMessage){FacesContextfc=FacesContext.getCurrentInstance()UIComponentcomponent=UIComponent.getCurrentComponent(fc).findComponent(clientComponent)if(componentinstanceofUIInput){UIInputinputComponent=(UIInput)componentif(inputComponent.isValid()){returndefaultMessage}else{Iteratoriter=fc.getMessages(inputComponent.getClientId())if(iter.hasNext()){returniter.next().getDetail()

    31

  • }}}return""}publicstaticThrowablegetRootCause(Throwablecause){if(cause!=null){Throwablesource=cause.getCause()if(source!=null){returngetRootCause(source)}else{returncause}}returnnull}}

    32

  • FACELETSFaceletsnospermitemanejarunsistemadeplantillasycomponentesdemanerafacil.

    CREARPLANTILLAFACELETSCONdePRIMEFACESPrimefacesnosofreceelcomponentequenospermiteunadisposicinadecuadadeloscomponentes.Acontinuacinsemostrarunaformasencilladeintegrarfaceletsconparacrearunaplantilladinmicaparanuestraaplicacinweb.

    DesdemenFile,seleccioneNew enCategories,seleccioneJavaServerFaces enFileTypes,seleccioneFaceletsTemplate

    colocarelnombreFileName:template

    33

  • ElIDEgeneraelarchivotemplates.xhtmlyenlacarpetaresourcesloscss

    Eliminamoselcdigoquegenerayagregamoselcdigoparaimplementarellayoutdeprimefaces.Integramosfaceletsconelcomponentedeprimefaces.Teniendopresentequeutiliza

  • Sideseamosincluirmenenlapartesuperioryqueestossemuestranensobreotrasreasynosolosobrelapartesuperiorincluirelcssdondesemodifica.uilayoutnorthy.uilayoutunitcontent.uilayoutnorth{zindex:20!importantoverflow:visible!important}.uilayoutnorth.uilayoutunitcontent{overflow:visible!important}

    Cambiar Por

    FaceletsTemplate

    Agregardentrodelel,lousamosparareordenarelcontenidoenPrimefaces.Indicandoloprimeroquedebecargarse.

    35

  • Cdigocompletodetemplate.xhtml.uilayoutnorth{zindex:20!importantoverflow:visible!important}.uilayoutnorth.uilayoutunitcontent{overflow:visible!important}Header

    36

  • FooterLeft

    37

  • Eliminarlosarchivosindex.htmleindex.xhtml

    Crearmenu.xhtmlCrearunapginaJavaServerFacesquecontendrlasopcionesdelMenseparadasdeltemplatequeluegolaincluiremosdentro.

    DesdemenFile,seleccioneNew enCategories,seleccioneJavaServerFaces enFileTypes,seleccioneJSFPage

    Seutilizaelcomponentedeprimefacesdebeestarincluidodentrodeun.Utilizaremosmenuitemparaindicarlasopcionesadesplegarenelmenu.

    laruta/faces/pages/estatus/indicaquesedebecrearlacarpeta/page/estatusdentrodeWebPages.

    38

  • Cdigocompletodemenu.xhtml

    39

  • Editartemplate.xhtmleneltop,colocamosel,medianteelincludeincluimosenlapartesuperiordelaplantillaelmenquetenemosenmenu.xhtml

    CrearlapginaIndex.xhtmlAhoracreamosunFaceletsTemplateClient

    DesdemenFile,seleccioneNew enCategories,seleccioneJavaServerFaces enFileTypesseleccioneFaceletsTemplateClient

    enFileName:indexPresionarelbotnBrowsedeTemplate:

    40

  • seleccionamoselTemplatetemplate.xhtml

    Segeneraelcdigodelapginaycolocamosencomentariotop,bottom,left.Utilizando,deestamaneraelreatop,bottom,leftsernreemplazadasporladefinicineneltemplate,ynosotroseditamoselreacenter,dondeescribimosloscomponentesjavaserverfacesquedeseamosmostrar.EnestecasoescribimosBIENVENIDOSASCRUMWEB

    Ejecutamoselproyecto secargaenelbrowser,podemosobservarellayoutconelmenyelmensajedelapginaindex.xhtmlqueeslaprimeraencargarsealejecutarelproyecto.

    41

  • CREARCDIBEANSESTATUSCONTROLLER.javaEstosCDIlosutilizamosinvocarlasdiversasoperacionessobrelosEntityyasociar

    loscomponentesconlaspginasJavaServerFaces.

    DesdemenFile,seleccioneNew enCategories,seleccionamosJavaServerFaces enFileTypes,seleccionamosJSFManagedBeans ClassName:EstatusController Package:com.avbravo.scrumweb.controller Scope:request

    Agregamoslasanotaciones@Named,@RequestScoped.Nota:Recordarutilizarjavax.enterprise.context.RequestScoped.AgregamoselEJBinyectandolomediante@Inject@InjectEstatusFacadeestatusFacadeAgregamoselEntityEstatusestatus=newEstatus()creamoslosget/setdelentityestatusclicderechoInsertCode>Generatedset/getyseleccionamosestatus

    Implementamoselmtodosave()dondeharemospersistenteslosentityenlabasededatos,enestemtodobuscaremosporlallaveprimariamedianteestatusFacade.find(),ysinoexisteinvocamosestatusFacade.create(),paraguardarlo.

    Sideseamoslimpiarlavistaescribimosestatus=newEstatus(),demaneraquealactualizarselapginaxhtml,estamostrarlosatributoslimpios.JSFUtil.infoDialog(),mostrarelmensajeenundilogo.SiqueremosquesemuestreenelgrowlusamosJSFUtil.addSuccessMessage().Crearmtodosedit()ydelete(),crearatributoencontradoconlosmtodosget/set.Recordarcambiar

    42

  • publicBooleanisEncontrado(){returnencontrado}porpublicBooleangetEncontrado(){returnencontrado}

    43

  • CdigocompletodeCDIBeansEstatusController.javaimportcom.avbravo.scrumweb.Estatusimportcom.avbravo.scrumweb.ejb.EstatusFacadeimportcom.avbravo.scrumweb.generales.JSFUtilimportcom.avbravo.scrumweb.generales.ResourcesFilesimportjava.io.Serializableimportjavax.enterprise.context.RequestScopedimportjavax.inject.Injectimportjavax.inject.Named/****@authoravbravo*/@Named@RequestScopedpublicclassEstatusController{@InjectEstatusFacadeestatusFacadeEstatusestatus=newEstatus()privateBooleanencontrado=falseprivateListitemspublicEstatusgetEstatus(){returnestatus}publicvoidsetEstatus(Estatusestatus){this.estatus=estatus}publicBooleangetEncontrado(){returnencontrado}publicvoidsetEncontrado(Booleanencontrado){this.encontrado=encontrado}/***CreatesanewinstanceofEstatusController*/

    44

  • publicEstatusController(){}publicStringsave(){try{if(estatusFacade.find(estatus.getIdestatus())!=null){JSFUtil.infoDialog("Mensaje","Existeunregistroconeseid")returnnull}estatusFacade.create(estatus)JSFUtil.addSuccessMessage("Guardado")estatus=newEstatus()}catch(Exceptione){JSFUtil.addErrorMessage(e.getLocalizedMessage())}returnnull}publicStringedit(){try{estatusFacade.edit(estatus)JSFUtil.addSuccessMessage("Guardado")}catch(Exceptione){JSFUtil.addErrorMessage(e.getLocalizedMessage())}returnnull}publicStringdelete(){try{estatusFacade.remove(estatus)JSFUtil.addSuccessMessage("Eliminado")encontrado=falseestatus=newEstatus()}catch(Exceptione){JSFUtil.addErrorMessage(e.getLocalizedMessage())}returnnull}//DevuelveellistparaunselectOneMenupublicListgetItems(){if(items==null){

    45

  • items=estatusFacade.findAll()}returnitems}}

    CrearlosFaceletsTemplateClientparainsertarEstatusAhoracreamosunFaceletsTemplateClient

    DesdemenFile,seleccioneNew enCategories,seleccioneJavaServerFaces enFileTypes,seleccioneFaceletsTemplateClient EnFileName:estatusinsert Foldercolocamos/page/estatus/ Templateseleccionamostemplate.xhtml

    SecreaelFaceletsclientestatusinsert.xhtmlenlacarpetapage/estatus

    46

  • Delamismamaneraquehicimosconlapginaindex,colocamosencomentariotop,button,left,mediantecenterUnavezseleccionado,hacemosclicsobreeltextoyseleccionamosInsertCode

    Luego,hacemosclicenJSFFormFromEntity

    47

  • SeleccionarelEntity:com.avbravo.scrumweb.EstatusyelManagedBeanProperty:estatusController.estatus

    Nota:EnTemplatesStyle:podemosseleccionarPrimefaces

    Estogeneraraloscomponentesprimefacesdirectamente.GeneraelcdigoconloscomponentesJSFasociadoalosatributosdelentity

    IndicamoseliddelpanelestoseutilizaparaidentificarelcomponenteporelidrespectivoColocamoslaetiquetay

  • Agregamoselcomponenteparamensajesquesemantendrnenlapgina.

    CreamoslaseccinfooterenelpanelGridyagregarelbotonGuardar,parainvocarelmtodosave()delCDIyenlapropiedadupdateutilizamospanelygrowl,demaneraqueelguardarunregistroseactualiceelpanelysemuestrelosmensajesenelgrowl.Sinolocolocamosenelupdatelosmensajesnosemostraran,yaqueelpordefectotieneAjaxhabilitadoentrue.Vistafinaldelapginaestatusinsert.xhtml,conloscomponentesyelbotnGuardar.

    49

  • Guardamoselarchivo,yvolvemosaejecutarlaaplicacinparamostrarloscambios.Tambinesimportanterecordarquesielproyectoestenejecucineldeploydelaaplicacinesautomticosinnecesidaddereiniciarelservidor.

    IngresamoslosdatosyaldarclicenelbotonGuardarsealmacenanenlabasededatoslosatributosqueestanenelEntityyseenvaelmensajeenelgrowlyenmessages.

    siingresamosunidestatusqueyaexistenosenviarelmensaje.

    SinousaramoslavalidacinparadeterminarsiexisteunregistroconesallaveprimariaobtendremoselmensajeTransactionaborted,ynoseramuyexplicativoparaelusuario

    50

  • Sideseamosusariconoenelbotn,agregamoselatributoicon="uiicondisk"a.

    Enelsiguienteenlacepodemosencontrarlalistadeiconosjquerydisponiblesparaloscomponentesprimefaces,queusaremosmedianteicon="nombredeliconohttp://jqueryui.googlecode.com/svn/tags/1.6rc5/tests/static/icons.htmlcolocamoselcursorsobreeliconoysedespliegaelmensajeconelnombre.

    Editar el entity Estatus.java Agregarel@NamedQueryfindByEstatusLikequenospermitirrealizarbsquedas

    porcoincidenciasenelatributoestatus.@NamedQuery(name="Estatus.findByEstatusLike",query="SELECTeFROMEstatuseWHERElower(e.estatus)like:estatus"),SegmentodelcdigoEntidad.javadondeseagregael@NamedQuery@Entity@Table(name="estatus")@XmlRootElement@NamedQueries({@NamedQuery(name="Estatus.findAll",query="SELECTeFROMEstatuse"),@NamedQuery(name="Estatus.findByIdestatus",query="SELECTeFROMEstatuseWHEREe.idestatus=:idestatus"),@NamedQuery(name="Estatus.findByEstatus",query="SELECTeFROMEstatuseWHEREe.estatus=:estatus"),@NamedQuery(name="Estatus.findByEstatusLike",query="SELECTeFROMEstatuseWHERElower(e.estatus)like:estatus"),@NamedQuery(name="Estatus.findByEsinicial",query="SELECTeFROMEstatuseWHEREe.esinicial=:esinicial")})

    51

    http://jquery-ui.googlecode.com/svn/tags/1.6rc5/tests/static/icons.html

  • publicclassEstatusimplementsSerializable{privatestaticfinallongserialVersionUID=1L

    EditarEstatusFacade.javaAgregarelmtodofindById,quenosdevolverunobjetodetipoEstatus.Elmtodofind,elcualbuscarelentityporlallaveprimaria.ElmtodofindByEsinicial()querecibeunparmetrocorrespondientealvalordelatributoesinicial(si/no).ElEntityEstatusfindByEsinicialesel@NamedQuery(name="Estatus.findByEsinicial",usaremosunQueryqueimplementalabsquedaydevolverunlist.ElmtodogetEstatusList()paraquedevuelvatodoslosentity,alinvocarEstatus.findAll.yelmtodoofindByEsinicial().agregarlosmtodosfindByEstatus(),findByIdEstatusList()yfindByEstatusLike()EditarEstatusFacade.javapublicEstatusfindById(Stringid){returnem.find(Estatus.class,id)}publicListgetEstatusList(){returnem.createNamedQuery("Estatus.findAll").getResultList()}publicListfindByEsinicial(Stringvalue){Queryquery=em.createNamedQuery("Estatus.findByEsinicial")returnquery.setParameter("esinicial",value).getResultList()}publicListfindByEstatus(Stringvalue){Queryquery=em.createNamedQuery("Estatus.findByEstatus")returnquery.setParameter("estatus",value).getResultList()}publicListfindByIdEstatusList(Stringvalue){Queryquery=em.createNamedQuery("Estatus.findByIdestatus")returnquery.setParameter("idestatus",value).getResultList()}publicListfindByEstatusLike(Stringvalue){Queryquery=em.createNamedQuery("Estatus.findByEstatusLike")value="%"+value.trim()+"%"

    52

  • returnquery.setParameter("estatus",value).getResultList()}

    ConvertidoresConviertenlosobjetoseneltipodedatosnecesario.PorejemplosiusamosunselectOneMenuconunalistadeobjetos,elconverterdevolverelobjetoseleccionado.

    Crear EstatusConverter.java CrearEstatusConverter.java

    DesdemenFile,seleccioneNew enCategories,seleccioneJavaServerFaces enFileTypes,seleccioneJSFManagedBeans ClassName:EstatusConverter Packagecom.avbravo.scrumweb.converter

    importcom.javscaz.rigemjsf.Usuariosimportcom.javscaz.rigemjsf.ejb.UsuariosFacadeimportcom.javscaz.rigemjsf.generales.JSFUtilimportjava.util.logging.Levelimportjava.util.logging.Loggerimportjavax.inject.Injectimportjavax.faces.component.UIComponentimportjavax.faces.context.FacesContextimportjavax.faces.convert.Converterimportjavax.faces.convert.FacesConverter@FacesConverter(value="estatusConverter")publicclassEstatusConverterimplementsConverter{@InjectprivateEstatusFacadeejbFacade@OverridepublicObjectgetAsObject(FacesContextfacesContext,UIComponentcomponent,Stringvalue){if(value==null||value.length()==0||JSFUtil.isDummySelectItem(component,value)){returnnull}returnthis.ejbFacade.find(getKey(value))}

    53

  • java.lang.StringgetKey(Stringvalue){java.lang.Stringkeykey=valuereturnkey}StringgetStringKey(java.lang.Stringvalue){StringBuffersb=newStringBuffer()sb.append(value)returnsb.toString()}@OverridepublicStringgetAsString(FacesContextfacesContext,UIComponentcomponent,Objectobject){if(object==null||(objectinstanceofString&&((String)object).length()==0)){returnnull}if(objectinstanceofEstatus){Estatuso=(Estatus)objectreturngetStringKey(o.getUsername())}else{Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,"object{0}isoftype{1}expectedtype:{2}",newObject[]{object,object.getClass().getName(),Estatus.class.getName()})returnnull}}}Nota:Silallaveprimariaesdetipointeger,utilizareltipodedatosjava.lang.Integerjava.lang.IntegergetKey(Stringvalue){java.lang.Integerkeykey=Integer.valueOf(value)returnkey}StringgetStringKey(java.lang.Integervalue){StringBuffersb=newStringBuffer()

    54

  • sb.append(value)returnsb.toString()}

    55