{"id":100,"date":"2012-03-28T20:51:01","date_gmt":"2012-03-28T23:51:01","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=100"},"modified":"2022-12-21T18:02:25","modified_gmt":"2022-12-21T21:02:25","slug":"o-javaserver-faces-jsf","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/o-javaserver-faces-jsf\/","title":{"rendered":"O JavaServer Faces (JSF)"},"content":{"rendered":"<p>Desde o surgimento de Servlets e JSPs, muitas tecnologias Java e frameworks foram surgindo com o objetivo de aumentar a produtividade e prover mais recursos ao desenvolvimento de aplica\u00e7\u00f5es <em>web<\/em>. Entretanto como se pode observar na figura abaixo os Servlets continuam sendo a base de todas as aplica\u00e7\u00f5es Java para a <em>web<\/em>. Assim como as outras tecnologias o JavaServer Faces cria apenas um n\u00edvel de abstra\u00e7\u00e3o sobre os Servlets, tornando o desenvolvimento de aplica\u00e7\u00f5es mais f\u00e1cil, escal\u00e1vel e robusto. Outro ponto positivo disso tudo est\u00e1 em possibilitar o uso de <em>tags<\/em> JSP, JSTL ou mesmo Servlets dentro de aplica\u00e7\u00f5es JSF.<\/p>\n<p style=\"text-align: center;\">A Arquitetura do JavaServer Faces<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jee.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-101\" title=\"jee\" src=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jee.png\" alt=\"\" width=\"709\" height=\"220\" srcset=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jee.png 709w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jee-300x93.png 300w\" sizes=\"(max-width: 709px) 100vw, 709px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">Fonte: ORACLE, 2010<\/p>\n<p>Nesse sentido o JSF \u00e9 um framework para o desenvolvimento de aplica\u00e7\u00f5es <em>web<\/em> MVC e oferece uma separa\u00e7\u00e3o clara entre a l\u00f3gica da aplica\u00e7\u00e3o e a de apresenta\u00e7\u00e3o (ORACLE, 2010). \u00a0Ele permite o desenvolvimento de aplica\u00e7\u00f5es <em>web<\/em> com uma separa\u00e7\u00e3o mais refinada entre a l\u00f3gica e a apresenta\u00e7\u00e3o do que \u00e9 tradicionalmente oferecido por outras tecnologias. Esta separa\u00e7\u00e3o tamb\u00e9m permite que cada membro de uma equipe de desenvolvimento possa se concentrar em uma \u00fanica parte do processo de desenvolvimento. Al\u00e9m de possibilitar uma maior facilidade de integra\u00e7\u00e3o entre os componentes.<\/p>\n<p>A partir da vers\u00e3o 2.0 do JSF houve a introdu\u00e7\u00e3o do <em>Facelets <\/em>que permite uma maior \u201ccomponentiza\u00e7\u00e3o\u201d das p\u00e1ginas JSF. Dentre as vantagens oferecidas pelo <em>Facelets <\/em>pode se destacar que:<\/p>\n<ul>\n<li>O C\u00f3digo pode ser reutilizado e estendido para os componentes atrav\u00e9s\u00a0 de templates e composi\u00e7\u00f5es;<\/li>\n<li>Possibilita a utiliza\u00e7\u00e3o de <em>@annotations<\/em> para registrar autom\u00e1ticamente os <em>mannaged beans, backing beans, validators<\/em> e outros;<\/li>\n<li>As regras de navega\u00e7\u00e3o impl\u00edcitas permitem aos desenvolvedores configurar rapidamente a navega\u00e7\u00e3o entre as p\u00e1ginas. Esses recursos reduzem consideravelmente a necessidade de fazer configura\u00e7\u00f5es em arquivos XML;<\/li>\n<li>Por fim, o JSF oferece uma rica arquitetura para o gerenciamento de estado dos componentes, processamento de dados, valida\u00e7\u00e3o de entrada do usu\u00e1rio e manipula\u00e7\u00e3o de eventos.<\/li>\n<\/ul>\n<p>Uma aplica\u00e7\u00e3o JSF t\u00edpica \u00e9 composta de p\u00e1ginas <em>web<\/em>, <em>managed beans<\/em>, <em>backing beans<\/em>, validadores, conversores e regras de navega\u00e7\u00e3o. H\u00e1 uma certa confus\u00e3o na defini\u00e7\u00e3o entre os <em>managed beans <\/em>e <em>backing beans<\/em>. Para a ORACLE (2010) <em>managed beans<\/em> s\u00e3o todos os <em>beans<\/em> de suporte a aplica\u00e7\u00e3o, j\u00e1 Mann(2005), por sua vez, afirma que os <em>beans<\/em> de suporte s\u00e3o <em>backing beans<\/em>. Nesse trabalho foi considerada a defini\u00e7\u00e3o dada por Geary &amp; Horstmann(2010). Para eles <em>managed beans<\/em> diferenciam-se de <em>backing beans<\/em> considerando suas caracter\u00edsticas no suporte a aplica\u00e7\u00e3o. Todos aqueles que encapsulam regras de neg\u00f3cio e efetuam algum, processamento de informa\u00e7\u00f5es s\u00e3o denominados <em>managed beans<\/em>. Aqueles que oferecem apenas suporte a p\u00e1gina s\u00e3o considerados <em>backing beans<\/em>.<\/p>\n<p>O pr\u00f3prio JSF possui seus conversores e validadores entretanto algumas vezes \u00e9 necess\u00e1rio a cria\u00e7\u00e3o de conversores e validadores espec\u00edficos para a aplica\u00e7\u00e3o. Eles servem para verificar por exemplo se um campo de senha \u00e9 igual a outro campo de confirma\u00e7\u00e3o de senha antes de cadastrar um usu\u00e1rio. J\u00e1 os conversores s\u00e3o respons\u00e1veis por efetuar convers\u00e3o de tipos. As regras de navega\u00e7\u00e3o, por sua vez, servem para definir o fluxo de navega\u00e7\u00e3o do usu\u00e1rio dentro da aplica\u00e7\u00e3o. At\u00e9 a vers\u00e3o 1.2 as regras de navega\u00e7\u00e3o e o mapeamento de <em>managed beans<\/em> eram feitos via XML no arquivo <em>\u201cfaces-config.xml\u201d<\/em> a partir da vers\u00e3o 2.0 \u00e9 poss\u00edvel configur\u00e1-las dentro dos pr\u00f3prios managed beans. Outro ponto relevante do JSF \u00e9 o ciclo de vida das requisi\u00e7\u00f5es que ser\u00e1 tema do pr\u00f3ximo t\u00f3pico.<\/p>\n<h2>Treinamentos relacionados com este post<\/h2>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\" \/><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\" \/><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\" \/><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\" \/><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\" \/><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\" \/><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_kotlin\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Kotlin para DEVs Java: Aprenda a Linguagem Padr\u00e3o do Android\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/20-kotlin.png\" \/><br \/>\n<\/a><\/p>\n<h2>Refer\u00eancias:<\/h2>\n<p>ORACLE. <strong>The Java EE 6 Tutorial<\/strong>. Redwood City: ORACLE, 2010<\/p>\n<p>MANN, Kito D. <strong>JavaServer Faces In action<\/strong>. 1ed. Greenwich: Manning, 2005.<\/p>\n<p>GEARY, David; HORSTMANN, Cay. <strong>Core JavaServer faces<\/strong>. 3ed. Redwood Shores: Prentice Hall, 2010.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desde o surgimento de Servlets e JSPs, muitas tecnologias Java e frameworks foram surgindo com o objetivo de aumentar a produtividade e prover mais recursos ao desenvolvimento de aplica\u00e7\u00f5es web. Entretanto como se pode observar na figura abaixo os Servlets continuam sendo a base de todas as aplica\u00e7\u00f5es Java para a web. Assim como as [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14,45,49,50,51,55,67,99],"tags":[136,172,176,177,178,182,195,226],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/100"}],"collection":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":2,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":1549,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/100\/revisions\/1549"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}