ebook img

PlugIn Tapestry: Desarrollo de aplicaciones web con Apache Tapestry PDF

311 Pages·2016·3.52 MB·Spanish
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview PlugIn Tapestry: Desarrollo de aplicaciones web con Apache Tapestry

PlugIn Tapestry  ​                                                 Autor  @picodotdev  https://picodotdev.github.io/blog-bitix/ 2019 1.4.2 5.4 A tod@s l@s programador@s que en su trabajo  no pueden usar el framework, librería o lenguaje que quisieran.  Y a las que se divierten programando y aprendiendo  hasta altas horas de la madrugada.    Non gogoa, han zangoa                                                      Hecho con un esfuerzo en tiempo considerable  con una buena cantidad de software libre  y más ilusión en una región llamada Euskadi. PlugIn Tapestry: Desarrollo de aplicaciones y páginas web con Apache Tapestry @picodotdev 2014-2019 2 Prefacio EmpecéElblogdepico.devyunosañosmástardeBlogBitixconelobjetivodepoderaprenderycompartir elconocimientodemuchascosasquemeinteresabandesdelaprogramaciónyelsoftwarelibrehastaanálisis delosproductostecnológicosquecaenenmismanos.Lasdelámbitodelaprogramacióncreoqueusándolas puedenresolverenmuchoscasoslosproblemastípicosdelasaplicacioneswebyqueencuentroeneldíaa díaenmitrabajocomodesarrollador.Sinembargo,pordistintascircunstanciasyaseanpropiasdelcliente,la empresaolaspersonaseshabitualquesolomesirvanmeramentecomosatisfaccióndeadquirirconocimientos. Hastaeldíadehoyunadeellaseseltemadelquetrataestelibro,ApacheTapestry. Paraescribirenelblogsolodependodemíydeningunaotracircunstanciasalvomitiempopersonal,escom- pletamentemíoconloquepuedohacerloquequieraconélynotengoningunalimitaciónparaescribiryusar cualquierherramienta,aunqueenunprincipiosoloseaparahacerunejemplomuysencillo,enelmomentoque lleguelaoportunidadquizámesirvaparaaplicarloaunproyectoreal. Pasadosyaunospocosañosdesdequeempecéelblogalláporel2010heescritovariosartículostratandoen cadaunadeellosdiferentestemasrelacionadosconApacheTapestryyquetodaaplicaciónwebdeberealizar independientementedellenguajeoframeworkqueseuse.Conelblogmediviertomuchoperonosesiesla formamásefectivaparadifundirtodaslasbondadesqueyaconozcodeesteframeworkyqueamedidavoy conociéndolo más sigo descubriendo. Ya llevaba pensándolo bastante tiempo y ha llegado un punto en que juntandotodoslosartículosqueheescritoenelblogcompletándolasconalgunacosamáspodríaformarun libroyelresultadoesloquetienesenlapantalladeldispositivoqueusesparaleerlo. ¿Esrealmentenecesarioqueescribieseestelibro?Puessíyno.No,porqueyahayotrosmuybuenoslibrossobre Tapestryalgunosescritosporloscommitersdelframework,comoTapestry5-Rapidwebapplicationdeve- lopmentinJava,quizámejorydeformamáscompletaqueloexplicadoenesteyquealguienconinteréspodría adquirirsinningúnproblema.Ysí,porqueescribiendounoenespañolhaymásposibilidadesdehacérselollegar amientornomásomenoscercano. Miobjetivoconestelibroesdifundirlapalabraparaqueotragentedisfruteconesteframeworktantocomo lohagoyocuandoprogramoconélyfinalmenteaumentaraunqueseaunpocolasposibilidadesdequepueda dedicarmijornadalaboralcompletausándolo(guiño,guiño).Tapestrynotieneel«hype»deotrosframeworks, nillevalaetiquetaágil(aunquepodría)queparecequeahorasinoseleponeaalgono«mola»ynomerece consideraciónperotienemuchascaracterísticasdesdecasisusiniciosenquefuepublicadoenel2002conla versión2queyadesearíanparasímuchosotrosaúnenlaactualidad. Comohabrásnotadoestelibronotehacostadoniuncéntimo,¿porquélodistribuyoalpreciode0,00€im- puestosincluidos?Larazónessimple,porquequiero.Sicobrasealgoporélprobablementelaaudienciaque 3 tuviesenoseríamuyampliaydetodosmodosnosaldríadepobre,siendogratisesperoqueunoscuantosdesa- rrolladoresalmenosloveanporencimasimplementeporculturageneralylocomparenconloqueusenpara programarahora,yaseaStruts,Grails,Play!,Django,Symfony,Silex,RubyonRails,.NETMVCuotrossimila- res.Sideentreesosqueloleenhayunoscuantosqueseanimanaprobarloyamesentiríasatisfecho,siademás algunolousaseparaunproyectorealconéxitomeharíamuyfeliz. Granpartedeestelibroestábasadoenloqueheaprendidodesdeel2004mediantesudocumentaciónoficial yusándoloprincipalmentedeformaautodidacta.Noconstituyeunaguíacompletayexhaustiva,nilopreten- de,simplementeesunmanualsuficientementeamplioparatransmitirallectorlosconceptosmásimportantes yqueunavezaprendidosseacapazdeaprenderelrestoprofundizandoporsímismosiconsigodespertarsu curiosidad.Ladocumentaciónoficialdelproyectoesamplia,buena,completaysuficienteparaaprenderdesde cero(algunasbuenaspartesdeestelibrosonpocomásqueunatraducción)peroademásdeladocumenta- ciónpuramentetécnicaquieroaportarlaexperienciayalgunasbuenasprácticasqueheobtenidocomousuario duranteestosañosydesdemicomienzocomoprogramadornosolodeesteframework. Loquevieneacontinuación Enlossiguientescapítulosencontrarásunaexplicacióndetalladadelascaracterísticasdelframeworkylafor- maderesolverunagranpartedelosaspectosconlosquetienenquetratarlasaplicacionesopáginasweb:el entornodedesarrollo,generarelhtmlconplantillas,lalógicadepresentación,lainternacionalizaciónyloca- lización,lapersistenciadelacapadepresentaciónypersistenciaenlabasededatos,elcontenedordeinver- sióndecontrol,laseguridad,peticionesajaxydatosenjson,enviarformularios,recibirarchivosydevolverlos, comocrearlayoutsparadarunaspectocomúnalaspáginassinduplicarcódigo,reutilizacióndecódigocon componentesyconlibreríasdecomponentes,pruebasunitarias,deintegraciónyfuncionales,assets(estilos, imágenes,javascript)yalgunascosasmásadicionalesenlasquenoentraréenmuchosdetallesperoquedaré lasindicacionesdecomorealizarlascomoelenviódecorreos,generacióndeinformes,gráficas,unaAPIREST yanalizadoresestáticosdecódigoquepuedensernecesariosenalgunoscasos. TeniendoexperienciayhabiendotrabajadoenproyectosrealesconJSP/Servlets,Struts,JSF,GrailsyApache Tapestrymequedoconunadiferenciasignificativaconlaúltimaopcióncomopuedessuponersihededicado unagrancantidaddetiempopersonalaescribirestelibroyelquededicoenmiblog.Tratarédeexponerenlas siguientespáginasmuchosdelosmotivosqueTapestrymedaparaelloyquequizátútambiénconsideres. ¡Empiezaladiversión!¿estáspreparad@? 4 Indice 1 Introducción 13 1.1 Principios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2 Características . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.3 Unpocodehistoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.4 Opcionesalternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.5 Arquitecturadeaplicacionesweb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6 Casosdeéxitoydereferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2 Iniciorápido 33 2.1 InstalaciónJDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.2 Iniciorápido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3 Entornodedesarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4 Integraciónconelservidordeaplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.1 SpringBoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.2 SpringBootgenerandounjar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.4.3 SpringBootgenerandounwar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.4.4 Servidordeaplicacionesexterno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.5 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.6 Códigofuentedelosejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5 INDICE INDICE 3 Páginasycomponentes 53 3.1 Clasedelcomponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.2 Plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.2.1 ContentTypeymarkup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.3 Parámetrosdelloscomponentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.3.1 Bindingsdeparámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.4 Laanotación@Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.4.1 Parámetrosrequeridos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.4.2 Parámetrosopcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.4.3 Parámetrosinformales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.4.4 Conversionesdetipoenparámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.5 Laanotación@Cached . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.6 Conversionesdetipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.7 Renderizadodeloscomponentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.7.1 Fasesderenderizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.7.2 Conflictosyordenesdemétodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 3.8 Navegaciónentrepáginas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 3.9 Peticionesdeeventosdecomponenteyrespuestas . . . . . . . . . . . . . . . . . . . . . . . . . 91 3.10 Peticionesderenderizadodepágina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.11 Patronesdenavegacióndepáginas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 3.12 Eventosdecomponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 3.12.1 Métodosmanejadoresdeevento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 3.13 Componentesdisponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 3.14 PáginaDashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 3.15 Productividadyerroresdecompilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6 INDICE INDICE 4 Contenedordedependencias(IoC) 115 4.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 4.2 Terminología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 4.3 Inversióndecontrol(IoC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.4 Clasecontraservicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.5 Inyección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.5.1 ConfiguraciónenTapestryIoC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 4.6 Tutoresdeservicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 4.7 Conversionesdetipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.8 Símbolosdeconfiguración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 5 AssetsymódulosRequireJS 141 5.1 Assetsenlasplantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 5.2 Assetsenlasclasesdecomponente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 5.3 Minimizandoassets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 5.4 Hojasdeestilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 5.5 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 5.5.1 AñadiendoJavaScriptpersonalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 5.5.2 CombinandolibreríasdeJavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.5.3 MinificandolibreríasdeJavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.5.4 Pilasderecursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.5.5 RequireJSymódulosdeJavascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.6 AssetsconWebjars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 5.7 Actualizarversionesassetsincorporadospordefecto . . . . . . . . . . . . . . . . . . . . . . . . 156 7 INDICE INDICE 6 Formularios 161 6.1 EventosdelcomponenteForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 6.2 Seguimientodeerroresdevalidación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 6.3 Almacenandodatosentrepeticiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 6.4 Configurandocamposyetiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 6.5 Erroresydecoraciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 6.6 Validacióndeformularios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 6.6.1 Validadoresdisponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 6.6.2 Centralizandolavalidación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 6.6.3 Personalizandoloserroresdevalidación . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.6.4 Configurarlasrestriccionesdevalidaciónenelcatálogodemensajes . . . . . . . . . . . 171 6.6.5 Macrosdevalidación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 6.7 Subiendoarchivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 6.8 Conversiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 7 Internacionalización(i18n)ylocalización(l10n) 177 7.1 Catálogosdemensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.1.1 Catálogoglobaldelaaplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7.1.2 Accediendoalosmensajeslocalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7.2 Imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 7.3 Seleccióndellocale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 7.4 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 7.5 Convencionesparaarchivospropertiesl10n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 8 Persistenciaenlacapadepresentación 185 8.1 Persistenciadepágina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 8.1.1 Estrategiasdepersistencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 8.2 Valorespordefecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 8.3 Persistenciadesesión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 8.3.1 DatosdesesiónexternalizadosconSpringSession . . . . . . . . . . . . . . . . . . . . . . 190 8

Description:
Desarrollo de aplicaciones y páginas web con Apache Tapestry. PlugIn Tapestry. Autor. @picodotdev http://picodotdev.github.io/blog-bitix/. 2014 1.3/5.4
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.