Apostila Struts2
Aula
01
Checkbox
http://struts.apache.org/
Struts É um framework de desenvolvimento da camada controladora, numa estrutura seguindo o padrão Model padrão Model 2 (uma variante do MVC do MVC oficializada pela Sun) pela Sun),, de aplicações web (principalmente) construído em Java em Java para ser utilizado em [1] um container web web em um servidor um servidor J2EE. J2EE. Este framework foi originalmente desenvolvido por Craig McClanahan e doado para a Apache Software Foundation em 2002, 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, 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 um Java Servlet que a processa, interage com um banco de dados e produz uma resposta formatada em HTML, ou é entregue a um JavaServer um JavaServer Page (JSP) (JSP) que mixa código HTML código HTMLee 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 (um servlet conhecido como ActionServlet) e facilita a escrita de moldes padronizados para a camada de visualização/view (normalmente em JSP, em JSP, mas XML 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", "ActionForward", uma cadeia de caracteres que informa ao controller qual qual página de resultado deve ser enviada para o cliente. cliente. As informações são passadas entre model e view em 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 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 idProduto; ; private String nome nome; ; private Double preco preco; ; public Produto() { // TODO Auto-generated constructor stub } public Produto(Integer idProduto idProduto, , String nome nome, , Double preco) preco ) { super(); this.idProduto idProduto = = idProduto idProduto; ; this.nome nome = = nome nome; ; this.preco preco = = 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
lista; private Integer[] idEscolhidos; private List produtosEscolhidos; public List getProdutosEscolhidos() { return produtosEscolhidos; } public void setProdutosEscolhidos(List 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 getLista() { lista = new ArrayList(); 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 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
www.cotiinformatica.com.br
6
Apostila Struts2
Aula
01
Checkbox
name="home" class="action.ProdutoAction" method="init"> /sistema.jsp
name="produto.enviar" class="action.ProdutoAction" method="enviar"> /resposta.jsp /sistema.jsp
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 Aula01-checkbox index.html index.htm index.jsp default.html default.htm default.jsp
www.cotiinformatica.com.br
9
Apostila Struts2
Aula
01
Checkbox
struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndEx ecuteFilter struts2 /*
Criar a página
índex.jsp
na pasta WebContent
<script type="text/javascript" src="bootstrap/js/jquery1.10.2.js"> <script type="text/javascript" src="bootstrap/js/bootstrap.js">
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 <script type="text/javascript" src="bootstrap/js/jquery1.10.2.js"> <script type="text/javascript" src="bootstrap/js/bootstrap.js"> Sistema Struts2 <%@ taglib prefix="s" uri="/struts-tags"%>
Struts 2 com CheckBox Marque os produtos: ${msg}
www.cotiinformatica.com.br
12
Apostila Struts2
Aula
01
Checkbox
resposta.jsp <%@ page language="java" contentType="text/html; charset=ISO8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> Resposta <script type="text/javascript" src="bootstrap/js/jquery1.10.2.js"> <script type="text/javascript" src="bootstrap/js/bootstrap.js">
www.cotiinformatica.com.br
13
Apostila Struts2
Aula
01
Checkbox
Struts 2 com CheckBox Home Produtos Escolhidos:
www.cotiinformatica.com.br
14
Apostila Struts2
Aula
02
StrutsTiles
Projeto Tiles Estrutura do projeto...
LIBS: antlr-2.7.7.jar c3p0-0.9.2.1.jar commons-beanutils-1.7.0.jar commons-collections-2.1.jar commons-collections-3.2.1-1.0.0.jar commons-digester-1.8.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar ehcache-core-2.4.3.jar freemarker-2.3.8.jar hibernate-c3p0-4.3.1.Final.jar hibernate-commons-annotations-4.0.4.Final.jar hibernate-core-4.3.1.Final.jar hibernate-ehcache-4.3.1.Final.jar hibernate-entitymanager-4.3.1.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar hibernate-validator-4.3.0.Final.jar hibernate-validator-annotation-processor-4.3.0.Final.jar jandex-1.1.0.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.3.GA.jar jboss-logging-annotations-1.2.0.Beta1.jar
www.cotiinformatica.com.br
1
Apostila Struts2
Aula
02
StrutsTiles
jboss-transaction-api_1.2_spec-1.0.0.Final.jar log4j-1.2.15.jar mysql-connector-java-5.1.23-bin.jar ognl-2.6.11.jar ojdbc14-10.2.0.3.jar servlet3-api.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.0-rc0.jar struts2-core-2.0.14.jar struts2-tiles-plugin-2.0.14.jar tiles-api-2.0.4.jar tiles-core-2.0.4.jar tiles-jsp-2.0.4.jar validation-api-1.0.0.GA.jar xwork-2.0.7.jar
package entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table;
@Entity @Table @NamedQueries( {@NamedQuery(name="Cliente.findAll",query="from Cliente"), @NamedQuery(name="Cliente.findByEmail" , query="from Cliente c where c.email= :param1" ) })
public class Cliente implements Serializable{ private static final long serialVersionUID = 1L;
www.cotiinformatica.com.br
2
Apostila Struts2
Aula
02
StrutsTiles
@Id @GeneratedValue(strategy=GenerationType. AUTO ) @Column private Integer idCliente; @Column(length=50) private String nome; @Column(length=50,unique= true) private String email; public Cliente() { } public Cliente(Integer idCliente, String nome, String email) { this.idCliente = idCliente; this.nome = nome; this.email = email; }
@Override public String toString() { return "Cliente [idCliente=" + idCliente + ", nome=" + nome + ", email=" + email + "]"; } public Integer getIdCliente() { return idCliente; } public void setIdCliente(Integer idCliente) { this.idCliente = idCliente; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }
www.cotiinformatica.com.br
3
Apostila Struts2
Aula
02
StrutsTiles
public static long getSerialversionuid() { return serialVersionUID; }
}
mysql_hibernate.cfg.xml org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver property> jdbc:mysql://localhost:3306/bd_t iles?createDatabaseIfNotExist=true root coti true update
package config; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport;
www.cotiinformatica.com.br
4
Apostila Struts2
Aula
02
StrutsTiles
public class Main { public static void main(String[] args) { new SchemaExport( new AnnotationConfiguration().configure( "config/mysql_hibernate.cfg. xml")).create( true, true); System.out.println("Tableas geradas"); } }
No console... log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly. drop table if exists Cliente create table Cliente ( idCliente integer not null auto_increment, email varchar(50), nome varchar(50), primary key (idCliente) ) alter table Cliente add constraint UK_tfai0ea59ylhrubk6at672968 (email) Tableas geradas
www.cotiinformatica.com.br
unique
5
Apostila Struts2
Aula
02
StrutsTiles
package persistence;
import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration;
public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { Configuration configuration = new Configuration().configure( "config/mysql_hibernate.cfg.xml" ); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings( configuration.get Properties());
www.cotiinformatica.com.br
6
Apostila Struts2
Aula
02
StrutsTiles
sessionFactory = configuration.buildSessionFactory( builder.build()); } catch (HibernateException ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError( ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void closeSessionFactory() { sessionFactory.close(); } }
package persistence; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; import entity.Cliente;
public class ClienteDao { Session session; Transaction transaction; Query query; Criteria criteria; public void create(Cliente c)throws Exception{ session = HibernateUtil. getSessionFactory().openSession(); transaction = session.beginTransaction(); session.save(c);
www.cotiinformatica.com.br
7
Apostila Struts2
Aula
02
StrutsTiles
transaction.commit(); session.close(); } public List findAll(){ session = HibernateUtil. getSessionFactory().openSession(); List resp = session.getNamedQuery("Cliente.findAll").list(); session.close(); return resp; } public Cliente findByCode(Integer cod)throws Exception{ session = HibernateUtil. getSessionFactory().openSession(); Cliente cliente= (Cliente) session.get(Cliente. class, cod); session.close(); return cliente; }
}
package action; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import entity.Cliente; import persistence.ClienteDao;
public class ControleCliente extends ActionSupport{ private Cliente cliente; HttpServletRequest request; private List lista; private void init(){ request = (HttpServletRequest)
www.cotiinformatica.com.br
8
Apostila Struts2
Aula
02
StrutsTiles
ActionContext. getContext().get(ServletActionContext. HTTP_RE QUEST ); }
public List getLista() { lista = new ClienteDao().findAll(); return lista; } public void setLista(List lista) { this.lista = lista; } public Cliente getCliente() { return cliente; } public void setCliente(Cliente cliente) { this.cliente = cliente; } public String home() { return SUCCESS; } public String cadastro() { return "cadastro"; } public String consulta() { getLista(); return "consulta"; } public String logout() { return "logout"; }
public String cadastrar(){ init(); try{ new ClienteDao().create( cliente); //grava cliente = new Cliente(); //limpa request.setAttribute("msg", "Dados Gravados do Cliente ..." ); //manada a mensagem //vá para success return SUCCESS; }catch(Exception ex){
www.cotiinformatica.com.br
9
Apostila Struts2
Aula
02
StrutsTiles
request.setAttribute("msg", "Error :" + ex.getMessage()); return ERROR; }
} }
struts.xml home /error.tiles cadastro
www.cotiinformatica.com.br
10
Apostila Struts2
Aula
02
StrutsTiles
name="error" type="tiles">/error.tiles
home cadastro consulta
web.xml org.apache.struts2.tiles.StrutsTilesListener tilesDefinitions /WEB-INF/tiles.xml struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*
www.cotiinformatica.com.br
11
Apostila Struts2
Aula
02
StrutsTiles
>
tiles.xml > > > > > > >
www.cotiinformatica.com.br
12
Apostila Struts2
Aula
02
StrutsTiles
style.css @CHARSET "ISO-8859-1"; #header { 50% 0 0; background-position: background-position :50% background-repeat: background-repeat :repeat no-repeat; } #wrap { margin-bottom: margin-bottom :0; margin-left: margin-left :auto; margin-right: margin-right :auto; margin-top: margin-top :0; overflow-x: overflow-x :hidden; overflow-y: overflow-y :hidden; padding-left: padding-left :10px ; padding-right: padding-right :10px ; position: position :relative; width: width :980px ; min-height: min-height : 400px ;
} #content { display: display :inline; float: float :left; font-size: font-size :100% ; line-height: line-height :1.6em; margin: margin :15px ; padding: padding :5px ; text-align: text-align :left; width: width :580px ; min-height: min-height : 400px ; } #sidebar { display: display :inline; float: float :left; margin: margin :15px ; padding: padding :5px ; width: width :300px ; }
www.cotiinformatica.com.br
13
Apostila Struts2
Aula
02
StrutsTiles
#footer { background-position: background-position :50% ; 50% 100% 100% background-repeat: background-repeat :repeat no-repeat; clear: clear :both; height: height :60px ; margin-bottom: margin-bottom :0; margin-left: margin-left :auto; margin-right: margin-right :auto; margin-top: margin-top :0; padding-bottom: padding-bottom :10px ; padding-top: padding-top :10px ; text-align: text-align :center; }
baseLayout.jsp <%@ taglib uri uri= ="http://tiles.apache.org/tags-tiles" prefix= prefix ="tiles"%> > > <meta http-equiv http-equiv= ="Content-Type" content content= ="text/html; charset=UTF8"> < > title> > >
>
>
www.cotiinformatica.com.br
14
Apostila Struts2
Aula
02
StrutsTiles