A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Struts Java avançado – PCC Jobson Ronan

Apresentações semelhantes


Apresentação em tema: "Struts Java avançado – PCC Jobson Ronan"— Transcrição da apresentação:

1 Struts Java avançado – PCC Jobson Ronan {jrjs@cin.ufpe.br}
Guilherme Kely

2 O que é? Um framework para facilitar a implementação de uma arquitetura MVC em aplicações web Oferece Um servlet controlador configurável (Front Controller) através de arquivos XML externos, que despacham requisições a classe Action (Command) implementados pelo desenvolvedor Uma vasta coleção de taglibs JSP Classes ajudantes que oferecem suporte a tratamento de XML, preenchimento de JavaBeans, validação de formulários e gerenciamento externo de conteúdo

3 Componentes Model (M) View (V) Controller (C)
Geralmente um objeto java (JavaBean) View (V) Geralmente uma página HTML ou JSP. Embora o Struts seja independente da camada de apresentação (ex. velstruts) Controller (C) org.apache.struts.action.ActionServlet ou subclasse

4 Componentes Classes ajudantes
FromBean: Encapsula dados de um formulário HTML (M) ActionError(s): Encapsula dados de Erros (M) (deprecated 1.2) ActionMessage(s): Encapsula dados de Mensagens (M) Custon tags: Encapsulam lógica de apresentação (V) Actions: implementam lógica comandos (C) ActionForward: Encapsulam lógica de redirecionamento (C)

5 Como funciona? Componentes-chave: ActionServlet: despachante de ações
Action: classe estendida por cada ação (comando) a ser implementada (Command pattern) struts-config.xml: arquivo onde se definem mapeamentos entre ações, páginas, beans e dados Form Bean JSP Action Servlet Action delega http Dados, Dao ou Session Facade despacha Bean prenche

6 Como usar? struts-blank.war
Um template básico para um aplicação web já configurada para usar o struts web.xml <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> ... </servlet>

7 Como usar? web.xml (cont.) ...
<!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- Struts Tag Library Descriptors --> <taglib> <taglib-uri>/tags/struts-bean</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib-uri>/tags/struts-html</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

8 Como usar? struts-config.xml
<?xml version="1.0" encoding="ISO " ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <!-- ============================================== Form Bean Definitions --> <form-beans> </form-beans> <!-- ======================================= Global Exception Definitions --> <global-exceptions> </global-exceptions> <!-- ========================================= Global Forward Definitions --> <global-forwards> <forward name="welcome" path="/Welcome.do"/> </global-forwards>

9 Como usar? struts-config.xml (cont.) ...
<!-- ========================================= Action Mapping Definitions --> <action-mappings> <action path="/Welcome“ forward="/pages/Welcome.jsp"/> </action-mappings> <!-- =========================================== Controller Configuration --> <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/> <!-- ====================================== Message Resources Definitions --> <message-resources parameter="MessageResources" />

10 Entendendo... Index.jsp taglib uri="/tags/struts-logic" prefix="logic" %> <logic:redirect forward="welcome"/>

11 Actions Implementando a ação cadastrar novo filme package pec;
//imports public class CadastrarFilmeAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //código de efetuar cadastro... return mapping.findForward("sucesso"); }

12 Actions Declarando <!-- ========================================= Action Mapping Definitions --> <action-mappings> <action path="/Welcome“ forward="/pages/Welcome.jsp"/> <action path="/cadastrarFilme" type="pec.CadastrarFilmeAction"/> <forward name="sucesso" path="pages/cadastroSucesso.jsp"/> </action-mappings> ...

13 ActionForm Nossa ação precisa de um formulário Java bean comum
As propriedades do bean são populadas de forma transparente public class CadastroFilmeForm extends ActionForm { private String idRef; private String nomeOriginal; private String nomeNacional; private String numeroCopias; //get´s e set´s }

14 ActionForm ActionFroms podem ser validados Commons validator
package pec; public class CadastroFilmeForm extends ActionForm { //... public ActionErrors validate(ActionMapping mapping, HttpServletRequest response) { ActionErrors validatorErros = new ActionErrors(); if (idRef == null || idRef.trim().equals("")) validatorErros.add("idRef", new ActionMessage( "filme.cadastro.idRef.required")); if (nomeOriginal == null || nomeOriginal.trim().equals("")) validatorErros.add("nomeOriginal", new ActionMessage( "filme.cadastro.nomeOriginal.required")); if (numCopias == null || numCopias.trim().equals("")) validatorErros.add("numCopias", new ActionMessage( "filme.cadastro.numCopias.required")); else if (!GenericValidator.isInt(numCopias)) "filme.cadastro.numCopias.notInt")); return validatorErros; } Commons validator

15 ActionForm Formulário (HTML/JSP) Formulário (HTML/JSP) Página Sucesso
Request recebido pelo controler Cria ou recicla um ActionForm Chama reset() Formulário (HTML/JSP) Guarda o ActionForm no escopo desejado Com menssagens de erro! Popula ActionForm a partir do request Dá um forward para o input Chama validate() do ActionForm Página Sucesso (HTML/JSP) Validação falha Validação ok Chama execute() do Action Dá um forward para “sucesso”

16 ActionForm ActionForm são firewalls dos Actions
O ActionForms só chegam aos actions caso tenham sido validados Cuidado com a definição dos tipos Se o usuário digita um valor, torne esta propriedade uma String

17 ActionForm Declarando (struts-config.xml) ... <form-beans>
<form-bean name="cadastroFilmeForm" type="pec.CadastrarFilmeForm"/> </form-beans> <action-mappings> <action path="/cadastrarFilme" type="pec.CadastrarFilmeAction" name="cadastroFilmeForm" input="/cadastrarNovoFilme.jsp"> <forward name="sucesso" path="/pages/cadastroFilmeSuc.jsp" /> </action>

18 ActionForm De volta ao action... Garantia de validação! package pec;
//imports public class CadastrarFilmeAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { CadastroFilmeForm cadastroForm = (CadastroFilmeForm) form; //código de efetuar cadastro... return mapping.findForward("sucesso"); } Garantia de validação!

19 ActionForm cadastrarNovoFilme.jsp
taglib uri="/tags/struts-html" prefix="html"%> taglib uri="/tags/struts-bean" prefix="bean"%> <html:html locale="true"> <head> <title>Cadastrar Filme</title> </head> <body> <h1>Cadastrar Filme</h1> <html:errors /> <table> <html:form action="cadastrarFilme"> <tr> <td><bean:message key="filme.cadastro.idRef" />*</td> <td><html:text property="idRef" /></td> </tr> <td><bean:message key="filme.cadastro.nomeOriginal" />*</td> <td><html:text property="nomeOriginal" /></td> <td><bean:message key="filme.cadastro.nomeNacional" /></td> <td><html:text property="nomeNacional" /></td> ...

20 ActionForm cadastrarNovoFilme.jsp (cont) ... <tr>
<td><bean:message key="filme.cadastro.numCopias" />*</td> <td><html:text property="numCopias" /></td> </tr> <td colspan="2"> <html:submit value="Cadastrar"/> <html:cancel value="Cancelar"/> </td> </html:form> </table> </body> </html:html>

21 ActionForm MessageResources.properties # -- cadastro filme success --
filme.cadastro.title=Filme Cadastrado filme.cadastro.heading=Sucesso! filme.cadastro.message=Filme Cadastrado com sucesso! # -- cadastro filme form -- filme.cadastro.idRef=Id Ref filme.cadastro.nomeOriginal=Nome Original filme.cadastro.nomeNacional=NomeNacional filme.cadastro.numCopias=Número de Cópias filme.cadastro.idRef.required=Id Ref Requerido filme.cadastro.nomeOriginal.required=Nome Original Requerido filme.cadastro.numCopias.required=Número de Cópias Requerido filme.cadastro.numCopias.notInt=Número de Cópias inválido

22 ActionForm ActionForm também podem ser usados para fornecer dados ...
<form-beans> <form-bean name="filmeForm" type="pec.FilmeForm"/> </form-beans> <action-mappings> <action path="/verDadosFilme" type="pec.VerDadosFilmeAction" name="filmeForm" scope="request" validate="false"> <forward name="sucesso" path="/pages/filmeForm.jsp" /> </action>

23 ActionForm Problemas Muitos objetos de domínio duplicados
Muito código de cópia de propriedades Usar BeanUtils.copyProperties(Object dest, Object src); Grande quantidade de Froms com grandes quantidades de propriedades pode ser difícil de manter Usar DynaActionForm?

24 Exceções Struts dá suporte a um tratamento de exceções declarativo
Suponha que o código de negócio de VerDadosFilmeAction lance a exceção pec.FilmeNaoEncontradoException <action path="/verDadosFilme" type="pec.VerDadosFilmeAction" name="filmeForm" scope="request" validate="false"> <forward name="sucesso" path="/pages/filmeForm.jsp" /> <exception key="filmeNaoEncontrado.exception" type="pec.FilmeNaoEncontradoException" path="/pages/exception.jsp" /> </action> ...

25 O que mais? Outros tipos de actions Plugins
DispatchAction: quando tempos um formulário que terá mais de uma ação associada Plugins Struts-Validator Struts-Tiles

26 Exercícios Implemente um aplicação web usando o struts para cadastrar, visualizar, atualizar, remover e listar usuários (CRUD) Usuários possuem: Nome, login (único), senha, data de cadastro Implemente a persistência usando JDBC *


Carregar ppt "Struts Java avançado – PCC Jobson Ronan"

Apresentações semelhantes


Anúncios Google