{"id":104,"date":"2012-09-30T21:01:29","date_gmt":"2012-10-01T00:01:29","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=104"},"modified":"2022-12-21T18:03:09","modified_gmt":"2022-12-21T21:03:09","slug":"o-ciclo-de-vida-das-requisicoes-no-javaserver-faces","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/o-ciclo-de-vida-das-requisicoes-no-javaserver-faces\/","title":{"rendered":"O Ciclo de Vida das Requisi\u00e7\u00f5es no JavaServer Faces"},"content":{"rendered":"<p>De acordo com a especifica\u00e7\u00e3o da arquitetura JSF, toda requisi\u00e7\u00e3o possui um ciclo de vida, em que cada requisi\u00e7\u00e3o \u00e9 tratada de uma maneira. Existem seis diferentes fases, entretanto nem toda requisi\u00e7\u00e3o percorre todas elas. Dependendo do tipo de requisi\u00e7\u00e3o, ou a\u00e7\u00f5es a serem executadas, algumas fases simplesmente s\u00e3o puladas. A Figura abaixo representa o ciclo de vida de uma requisi\u00e7\u00e3o no JSF.<\/p>\n<p>Ap\u00f3s uma requisi\u00e7\u00e3o o JSF restaura uma c\u00f3pia da p\u00e1gina do cliente armazenada no <em>FacesContext<\/em>, no lado servidor ou cria uma nova p\u00e1gina caso ela ainda n\u00e3o exista. Essa fase \u00e9 chamada de <em>Restore View (Restaurar a Vis\u00e3o)<\/em>. Ap\u00f3s essa fase o JSF atualiza os valores da p\u00e1gina\u00a0 do servidor com os novos valores dos componentes da p\u00e1gina do cliente, como por exemplo, valores de campos de formul\u00e1rios, cookies etc. Essa fase \u00e9 chamada de <em>Apply Request Values (Aplicar Valores da Requisi\u00e7\u00e3o)<\/em>.<\/p>\n<p>Figura 6 &#8211; O Ciclo de Vida das Requisi\u00e7\u00f5es no JavaServer Faces<\/p>\n<p><a href=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jsf_lifecycle.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-211\" title=\"jsf_lifecycle\" src=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jsf_lifecycle.jpg\" alt=\"\" width=\"850\" height=\"487\" srcset=\"https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jsf_lifecycle.jpg 850w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jsf_lifecycle-300x172.jpg 300w, https:\/\/www.erudio.com.br\/blog\/wp-content\/uploads\/2012\/09\/jsf_lifecycle-768x440.jpg 768w\" sizes=\"(max-width: 850px) 100vw, 850px\" \/><\/a><\/p>\n<p>Adaptado de: GEARY &amp; HORSTMANN, 2010<\/p>\n<p>Ap\u00f3s as fases anteriores \u00e9 iniciada a fase <em>Process Validations (Processar Valida\u00e7\u00f5es)<\/em> nela \u00e9 feita a convers\u00e3o e\/ou a valida\u00e7\u00e3o dos novos valores dos componentes. Por exemplo, na p\u00e1gina do cliente quando ele digita uma data em um &lt;p:inputCalendar&gt;,\u00a0 este valor \u00e9 atribu\u00eddo como String\u00a0 ao componente, antes deste valor ser atribu\u00eddo \u00e0 sua classe Java correspondente \u00e9 necess\u00e1rio convert\u00ea-lo para o tipo Date. A valida\u00e7\u00e3o de campos tamb\u00e9m \u00e9 efetuada nessa fase, por exemplo, a valida\u00e7\u00e3o de um e-mail ou se uma data final n\u00e3o \u00e9 menor que a data inicial. Logo em seguida ocorre a <em>Update Model Values (Atualiza\u00e7\u00e3o os Valores do Modelo)<\/em> fase na qual os valores dos componentes enviados pelo cliente s\u00e3o atribu\u00eddos \u00e0s classes Java correspondentes.<\/p>\n<p>Posteriormente ocorre a fase <em>Invoke Application (Invocar a Aplica\u00e7\u00e3o)<\/em> nela os m\u00e9todos (<em>action<\/em> ou <em>actionListener<\/em>) dos bot\u00f5es e links que est\u00e3o configurados nos formul\u00e1rios da p\u00e1gina do cliente s\u00e3o finalmente invocados. Nessa fase todos os valores j\u00e1 est\u00e3o convertidos e validados, e \u00e9 poss\u00edvel manipular todos os dados inseridos pelo usu\u00e1rio.<\/p>\n<p>Por fim, a <em>Render Response (Renderizar a resposta)<\/em> \u00faltima fase do ciclo de vida do JSF \u00e9 executada e todos os componentes s\u00e3o exibidos com seu estado corrente atualizado. Nessa etapa o estado da view \u00e9 salvo no objeto <em>FacesContext<\/em> para a pr\u00f3xima requisi\u00e7\u00e3o ou para opera\u00e7\u00f5es no lado do servidor. Dessa forma o processamento da requisi\u00e7\u00e3o termina e a resposta \u00e9 renderizada. Al\u00e9m dessas seis fases existem outras subfases menores mas que n\u00e3o \u00e9 t\u00e3o relevante explic\u00e1-las neste post.<\/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\"><br \/>\n<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>GEARY, David; HORSTMANN, Cay.\u00a0<strong>Core JavaServer faces<\/strong>. 3ed. Redwood Shores: Prentice Hall, 2010.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>De acordo com a especifica\u00e7\u00e3o da arquitetura JSF, toda requisi\u00e7\u00e3o possui um ciclo de vida, em que cada requisi\u00e7\u00e3o \u00e9 tratada de uma maneira. Existem seis diferentes fases, entretanto nem toda requisi\u00e7\u00e3o percorre todas elas. Dependendo do tipo de requisi\u00e7\u00e3o, ou a\u00e7\u00f5es a serem executadas, algumas fases simplesmente s\u00e3o puladas. A Figura abaixo representa o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[45,49,50,51],"tags":[143,172,176,195,226],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/104"}],"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=104"}],"version-history":[{"count":2,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":1552,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/104\/revisions\/1552"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}