Apostila Struts2 Aula 01 Checkbox http://struts.apache.org/ Struts É um framework de desenvolvimento da camada controladora, numa estrutura seguindo o padrão Model 2 (uma variante do MVC oficializada pela Sun), de aplicações web (principalmente) construído em Java para ser utilizado em um container web em um servidor J2EE.[1] Este framework foi originalmente desenvolvido por Craig McClanahan e doado para a Apache Software Foundation em 2002, onde continua sendo desenvolvido segundo o padrão desta fundação. Objetivos e visão geral Em um aplicativo de web padrão Java EE, o cliente normalmente envia informações ao servidor através de um formulário da web. Em seguida, a informação ou é entregue a umJava Servlet que a processa, interage com um banco de dados e produz uma resposta formatada em HTML, ou é entregue a um JavaServer Page (JSP) que mixa código HTMLe Java para obter o mesmo resultado. Ambas as abordagens são consideradas inadequadas para grandes projetos porque eles misturam a lógica do aplicativo com apresentação e dificultam a manutenção. O objetivo do Struts é separar o model (modelo - lógica de aplicativo que interage com um banco de dados) do view (visualização - páginas HTML apresentadas para o cliente) e do controller (controlador - instância que transmite informações entre a exibição e o modelo). Struts fornece o www.cotiinformatica.com.br 1 Apostila Struts2 Aula 01 Checkbox controlador/controller (um servlet conhecido como ActionServlet) e facilita a escrita de moldes padronizados para a camada de visualização/view (normalmente em JSP, mas XML/XSLT e Velocity também são suportados). O programador de aplicativo da web é responsável por escrever o código do modelo/model, e por criar um arquivo de configuração centralizador (struts-config.XML) que une modelo, visualização e controlador. Solicitações do cliente são enviadas para o controller em forma de Actions (ações) definidas no arquivo de configuração. O controller, ao receber uma solicitação, chama a classe Action correspondente a Programação Orientada a Objeto, e esta interage com o código do model específico. O código do model retorna um "ActionForward", uma cadeia de caracteres que informa ao controller qual página de resultado deve ser enviada para o cliente. As informações são passadas entre model e view em forma de JavaBeans especial. Uma poderosa biblioteca personalizada de palavras-chave (tags - metadata) permite ler e gravar o conteúdo (beans) da camada de apresentação sem a necessidade de qualquer código Java embutido. Struts é categorizado como uma estrutura de aplicativo web baseada em solicitação. Struts também oferece suporte a internacionalização e inclui um mecanismo de moldes chamado "Tiles", que permite que a camada de apresentação seja composta de cabeçalho, rodapé e componentes de conteúdo independentes. Principais problemas e soluções: Facilita a população de beans (Action Forms) Simplifica o uso de servlets, necessitando apenas a criação de classes Action Com suas tags dispensa o uso de scriptlets em 98% dos casos. LIBS utlizadas no projeto... asm-3.3.jar asm-commons-3.3.jar commons-fileupload-1.3.jar commons-io-2.0.1.jar commons-lang-2.4.jar commons-lang3-3.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar mysql-connector-java-5.1.26-bin.jar ognl-3.0.6.jar servlet3-api.jar www.cotiinformatica.com.br 2 Apostila Struts2 Aula 01 Checkbox struts2-convention-plugin-2.3.15.1.jar struts2-core-2.3.15.1.jar struts2-jquery-plugin-3.6.1.jar xwork-core-2.3.15.1.jar Estrutura do projeto... package entity; public class Produto { private Integer idProduto; private String nome; private Double preco; public Produto() { // TODO Auto-generated constructor stub } public Produto(Integer idProduto, String nome, Double preco) { super(); this.idProduto = idProduto; this.nome = nome; this.preco = preco; } @Override public String toString() { www.cotiinformatica.com.br 3 Apostila Struts2 Aula 01 Checkbox return "Produto [idProduto=" + idProduto + ", nome=" + nome + ", preco=" + preco + "]"; } public Integer getIdProduto() { return idProduto; } public void setIdProduto(Integer idProduto) { this.idProduto = idProduto; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public Double getPreco() { return preco; } public void setPreco(Double preco) { this.preco = preco; } @Override public boolean equals(Object c) { return this.idProduto.equals(((Produto)c).getIdProduto()); } } package action; import java.security.IdentityScope; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; www.cotiinformatica.com.br 4 Apostila Struts2 Aula 01 Checkbox import entity.Produto; public class ProdutoAction extends ActionSupport { private Produto produto; private List<Produto> lista; private Integer[] idEscolhidos; private List<Produto> produtosEscolhidos; public List<Produto> getProdutosEscolhidos() { return produtosEscolhidos; } public void setProdutosEscolhidos(List<Produto> produtosEscolhidos) { this.produtosEscolhidos = produtosEscolhidos; } public Produto getProduto() { return produto; } public void setProduto(Produto produto) { this.produto = produto; } public Integer[] getIdEscolhidos() { return idEscolhidos; } public void setIdEscolhidos(Integer[] idEscolhidos) { this.idEscolhidos = idEscolhidos; } public List<Produto> getLista() { lista = new ArrayList<Produto>(); lista.add(new Produto(10, "arroz", 15.)); lista.add(new Produto(20, "feijao", 9.5)); lista.add(new Produto(30, "carne", 50.)); lista.add(new Produto(40, "flango", 16.)); return lista; } public void setLista(List<Produto> lista) { this.lista = lista; } www.cotiinformatica.com.br 5 Apostila Struts2 Aula 01 Checkbox public String init() { getLista(); return SUCCESS; } public String enviar() { HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST ); try { Produto c = new Produto(); getLista(); produtosEscolhidos = new ArrayList<>(); if (idEscolhidos.length > 0) { for (Integer id : idEscolhidos) { Produto p = new Produto(); p.setIdProduto(id); produtosEscolhidos.add(lista.get(lista.indexOf(p))); } return SUCCESS; } else { throw new IllegalArgumentException("Nenhum Produto Marcado !! "); } } catch (Exception ex) { request.setAttribute("msg", "Error :" + ex.getMessage()); } return ERROR; } } struts.xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="produtoaction" extends="struts-default"> www.cotiinformatica.com.br 6 Apostila Struts2 Aula 01 Checkbox <action name="home" class="action.ProdutoAction" method="init"> <result name="success">/sistema.jsp</result> </action> <action name="produto.enviar" class="action.ProdutoAction" method="enviar"> <result name="success">/resposta.jsp</result> <result name="error">/sistema.jsp</result> </action> </package> </struts> Para gerar o XML... Clicar com o botão direito no projeto -> Properties... www.cotiinformatica.com.br 7 Apostila Struts2 Aula 01 Checkbox Clicar em Project Faces -> Desmarcar Dynamic Web Module clicando com o botão direito -> Unlock Desmarca -> Apply www.cotiinformatica.com.br 8 Apostila Struts2 Aula 01 Checkbox Marcar novamente -> Futher Configuration -> clicar em Generate web.xml -> ok -> Apply -> OK web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Aula01-checkbox</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> www.cotiinformatica.com.br 9 Apostila Struts2 Aula 01 Checkbox <filter-name>struts2</filter-name> <filterclass>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndEx ecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> Criar a página índex.jsp na pasta “WebContent” <!doctype html> <html> <head> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"> <script type="text/javascript" src="bootstrap/js/jquery1.10.2.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> </head> <body> <div class="container"> <div class="well"> <h3>Aula 1 Struts 2</h3> </div> <a href="home.action" class="btn btn-primary">Entrar no Sistema <span class="glyphicon glyphicon-log-in"></span> </a> </div> </body> </html> www.cotiinformatica.com.br 10 Apostila Struts2 Aula 01 Checkbox Para rodar o projeto... Clicar no projeto com o botão direito -> Run as -> Run on server www.cotiinformatica.com.br 11 Apostila Struts2 Aula 01 Checkbox sistema.jsp <!doctype html> <html> <head> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"> <script type="text/javascript" src="bootstrap/js/jquery1.10.2.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <title>Sistema Struts2</title> </head> <body> <%@ taglib prefix="s" uri="/struts-tags"%> <div class="container"> <div class="well"> <h1>Struts 2 com CheckBox</h1> </div> <div class="col-sm-8 col-sm-offset-2"> <s:form action="produto.enviar"> <label style="font-color: #000">Marque os produtos:</label> <s:checkboxlist list="lista" name="idEscolhidos" listKey="idProduto" listValue="nome" /> <s:submit value="Enviar" cssClass="btn btn-primary"/> <br /> <br /> ${msg} </s:form> </div> </div> </body> www.cotiinformatica.com.br 12 Apostila Struts2 Aula 01 Checkbox </html> resposta.jsp <%@ page language="java" contentType="text/html; charset=ISO8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> <title>Resposta</title> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"> <script type="text/javascript" src="bootstrap/js/jquery1.10.2.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> </head> www.cotiinformatica.com.br 13 Apostila Struts2 Aula 01 Checkbox <body> <div class="container"> <div class="well"> <h1>Struts 2 com CheckBox</h1> <a href="home.action" class="btn btnprimary"><span class="glyphicon glyphicon-home"></span> Home</a> </div> <h4>Produtos Escolhidos: </h4><br/> <s:property value="produtosEscolhidos"/> <br/> </div> </body> </html> www.cotiinformatica.com.br 14