Вы находитесь на странице: 1из 105

Apostila Struts2 Aula

Checkbox 01
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

Checkbox 01
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

Checkbox 01
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

Checkbox 01
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

Checkbox 01
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

Checkbox 01
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

Checkbox 01

<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

Checkbox 01
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

Checkbox 01
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

Checkbox 01
<filter-name>struts2</filter-name>
<filter-
class>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/jquery-
1.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

Checkbox 01
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

Checkbox 01

sistema.jsp
<!doctype html>
<html>

<head>
<link rel="stylesheet" href="bootstrap/css/bootstrap.css" >
<script type="text/javascript" src="bootstrap/js/jquery-
1.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

Checkbox 01
</html>

resposta.jsp
<%@ page language="java" contentType="text/html; charset=ISO-
8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html >


<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
<title>Resposta</title>

<link rel="stylesheet" href="bootstrap/css/bootstrap.css" >


<script type="text/javascript" src="bootstrap/js/jquery-
1.10.2.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
</head>

www.cotiinformatica.com.br 13
Apostila Struts2 Aula

Checkbox 01
<body>

<div class="container">
<div class="well">
<h1>Struts 2 com CheckBox </h1>
<a href="home.action" class="btn btn-
 primary"><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
Apostila Struts2 Aula

StrutsTiles 02
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

StrutsTiles 02
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

StrutsTiles 02
@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

StrutsTiles 02
public static long getSerialversionuid() {
return serialVersionUID;
}
}

mysql_hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate
Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd">
<hibernate-configuration >
<session-factory>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </pro
perty>
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </
property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/bd_t
iles?createDatabaseIfNotExist=true </property>
<property
name="hibernate.connection.username">root</property>
<property
name="hibernate.connection.password">coti</property>

<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>

<mapping class="entity.Cliente"/>

</session-factory>
</hibernate-configuration >

package config;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

www.cotiinformatica.com.br 4
Apostila Struts2 Aula

StrutsTiles 02
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 unique
(email)
Tableas geradas

www.cotiinformatica.com.br 5
Apostila Struts2 Aula

StrutsTiles 02

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

StrutsTiles 02
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

StrutsTiles 02
transaction.commit();
session.close();
}

public List<Cliente> findAll(){
session = HibernateUtil. getSessionFactory().openSession();
List<Cliente> 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<Cliente> lista;

private void init(){
request = (HttpServletRequest)

www.cotiinformatica.com.br 8
Apostila Struts2 Aula

StrutsTiles 02

ActionContext. getContext().get(ServletActionContext. HTTP_RE
QUEST );
}

public List<Cliente> getLista() {
lista = new ClienteDao().findAll();
return lista;
}
public void setLista(List<Cliente> 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

StrutsTiles 02
request.setAttribute("msg", "Error :" +
ex.getMessage());
return ERROR;
}
}
}

struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration
2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >

<struts>

<constant name="struts.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.custom.i18n.resources"
value="ApplicationResources" />

<package name="default" extends="struts-default">

<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>

<action name="home" method="home"


class="action.ControleCliente">
<result name="success"
type="tiles">home</result>
<result name="error"
type="tiles">/error.tiles</result>
</action>

<action name="cliente.gravar" method="cadastrar"


class="action.ControleCliente">
<result name="success"
type="tiles">cadastro</result>

www.cotiinformatica.com.br 10
Apostila Struts2 Aula

StrutsTiles 02
<result name="error"
type="tiles">/error.tiles</result>
</action>

<action name="*Menu" method="{1}"


class="action.ControleCliente">
<result name="success" type="tiles">home</result>
<result name="cadastro" type="tiles">cadastro</result>
<result name="consulta" type="tiles">consulta</result>
</action>

</package>
</struts>

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<listener>
<listener-
class>org.apache.struts2.tiles.StrutsTilesListener </listener-
class>
</listener>

<context-param>
<param-name>tilesDefinitions</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>

<filter>
<filter-name>struts2</filter-name>
<filter-
class>org.apache.struts2.dispatcher.FilterDispatcher </filter-
class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>

www.cotiinformatica.com.br 11
Apostila Struts2 Aula

StrutsTiles 02
</filter-mapping>
</filter-mapping >
</web-app
</web-app>>

tiles.xml
<?xml version
<?xml version=="1.0" encoding
encoding=="UTF-8" ?>
<!DOCTYPE
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration
2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd" >
<tiles-definitions
tiles-definitions>>

<definition name
name=
="baseLayout" template
template=="/BaseLayout.jsp">
<put-attribute name
name=
="title" value
value=="" />
<put-attribute name
name=
="header" value
value=="/Header.jsp" />
<put-attribute name
name=
="menu" value
value=="/Menu.jsp" />
<put-attribute name
name=
="body" value
value=="" />
<put-attribute name
name=
="footer" value
value=="/Footer.jsp" />
</definition
</definition>>

<definition name
name=
="home" extends
extends=="baseLayout">
<put-attribute name
name=
="title" value
value=
="Welcome page" />
<put-attribute name
name=
="body" value
value=
="/Welcome.jsp" />
</definition
</definition>>

<definition name
name=
="/error.tiles" extends
extends=="baseLayout">
<put-attribute name
name=
="title" value
value=="Error page" />
<put-attribute name
name=
="body" value
value=="/Error.jsp" />
</definition
</definition>>

<definition name
name=
="cadastro" extends
extends=
="baseLayout">
<put-attribute name
name=="title" value
value=="Pagina de
Cadastro" />
<put-attribute name
name=="body" value
value=="/cadastro.jsp" />
</definition
</definition>>

<definition name
name=
="consulta" extends
extends=
="baseLayout">
<put-attribute name
name=="title" value
value=="Pagina de
Consulta" />
<put-attribute name
name=="body" value
value=="/consulta.jsp" />
</definition
</definition>>

</tiles-definitions
</tiles-definitions>>

www.cotiinformatica.com.br 12
Apostila Struts2 Aula

StrutsTiles 02

style.css
@CHARSET "ISO-8859-1";

#header {
background-position:
background-position :50% 0;
50% 0
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

StrutsTiles 02

#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"%>

<!DOCTYPE HTML>
<!DOCTYPE
<html
html>>

<head
head>>
<meta http-equiv
http-equiv=
="Content-Type" content
content=
="text/html; charset=UTF-
8">
<title
title><
><tiles:insertAttribute
tiles:insertAttribute name
name=
="title" ignore
ignore=="true"
/></title
/></ title>
>
<link rel
rel=
="stylesheet" type
type=="text/css" media
media=="all"
href=
href ="style.css" />
</head
</head>>

<body id=
id="home">
<div id
id=="header">
<tiles:insertAttribute name
name=="header" />
</div
</div>
>

<div id=
id="wrap">
<div id
id=="content">
<tiles:insertAttribute name
name=="body" />
</div
</div>
>

www.cotiinformatica.com.br 14
Apostila Struts2 Aula

StrutsTiles 02
<div id="sidebar">
<tiles:insertAttribute name="menu" />
</div>
</div>

<div id="footer">
<tiles:insertAttribute name="footer" />
</div>
</body>
</html>

header.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<div class="container">
<h1 class="well">Struts 2 Example - Tiles </h1>
</div>

<s:property value="title" />

footer.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<div class="container">
<h4 class="well">
<a
href="www.cotiinformatica.com.br">www.cotiinformatica.com.br </a>
</h4>
</div>

<s:property value="footer" />

menu.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

www.cotiinformatica.com.br 15
Apostila Struts2 Aula

StrutsTiles 02

<ul class="nav nav-pills nav-stacked">


<li class="active"><a href="<s:url
action="homeMenu"/>">Home</a></li>
<li><a href="<s:url
action="cadastroMenu"/>">Cadastrar</a></li>
<li><a href="<s:url
action="consultaMenu"/>">Consultar</a></li>
</ul>

index.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<html>

<head>
<title>Struts 2</title>
<link rel="stylesheet" href="bootstrap/css/bootstrap.css">
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>

</head>

<body>

<div class="container">
<div class="well">
<h2>Projeto - Template - Struts Tilles </h2>
<s:actionerror />
<s:a href="home.action">Entrar no Sistema</s:a>
</div>
</div>
</body>

</html>

www.cotiinformatica.com.br 16
Apostila Struts2 Aula

StrutsTiles 02

welcome.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>

<head>
<%@taglib prefix="s" uri="/struts-tags"%>
<link rel="stylesheet" href="bootstrap/css/bootstrap.css" />
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
</head>

<body>
<div class="col-sm-12">
<div class="well">
Bem vindo ao Struts 2

<a
href="https://struts.apache.org/">https://struts.apache.org/ </a>
<br>

www.cotiinformatica.com.br 17
Apostila Struts2 Aula

StrutsTiles 02

<p>Vamos analisar algumas das características do Struts 2 que o


ajudaram a se tornar um framework mais
amigável e produtivo ao desenvolvedor. </p>

<p>Linguagem Java: A linguagem Java tem mais de 10 anos de vida,


possuindo diversas bibliotecas
disponíveis que facilitam a vida dos programadores para se
concentrarem mais no seus negócios e
menos na infraestrutura e características da linguagem. Com uma
plataforma madura por trás, o
Struts está disponível para quem trabalha com Java. </p>

<p>Plug-ins: O Struts 2 aceita plug-ins disponibilizados por


terceiros, assim o Struts não exige
que o framework venha com tudo e sim apenas as funcionalidades
básicas.</p>
</div>
</div>
</body>

</html>

www.cotiinformatica.com.br 18
Apostila Struts2 Aula

StrutsTiles 02

cadastro.jsp
<!DOCTYPE html>
<html>
<head>
<%@ taglib prefix="s" uri="/struts-tags"%>
<link rel="stylesheet" href="bootstrap/css/bootstrap.css">
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
</head>

<body>
<div class="jumbotron">
<ul class="nav nav-tabs">
<li><a href="#">Cadastrar Cliente</a>
</li>
</ul>
<p/>

<div class="row">
<s:form action="cliente.gravar" cssClass="form1">
<div class="col-sm-10">
<label for="nome">Nome:</label>
<input type="text" id="nome" name="cliente.nome"
class="form-control" />
</div>

<div class="col-sm-10">
<label for="Email">Email:</label>
<input type="text" id="email" name="cliente.email"
class="form-control" />
</div>

<div class="col-sm-10">
<br/>
<input type="submit" value="Cadastrar Cliente"
class="btn btn-primary" />
</div>
<p/>

<div class="col-sm-10">

www.cotiinformatica.com.br 19
Apostila Struts2 Aula

StrutsTiles 02
${msg}
</div>

</s:form>
</div>
</div>
</body>
</html>

www.cotiinformatica.com.br 20
Apostila Struts2 Aula

StrutsTiles 02
Cadastrando...

Cadastrado..

www.cotiinformatica.com.br 21
Apostila Struts2 Aula

StrutsTiles 02

consulta.jsp
<%@ page language="java" contentType="text/html; charset=ISO-
8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html >
<html>

<head>
<%@taglib prefix="s" uri="/struts-tags"%>
<link rel="stylesheet" href="bootstrap/css/bootstrap.css" />
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
</head>

<body>

<div>
<ul class="nav nav-tabs">
<li class="active"><a href="#">Consultar
Cliente</a></li>
</ul>

<div class="col-sm-12">
<table class="table table-hover">
<thead>
<tr>
<th>IdCliente</th>
<th>Nome</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<s:iterator value="lista">
<tr>
<td><s:property
value="idCliente" /></td>
<td><s:property
value="nome" /></td>

www.cotiinformatica.com.br 22
Apostila Struts2 Aula

StrutsTiles 02
<td><s:property
value="email" /></td>
</tr>
</s:iterator>
</tbody>
</table>
</div>
</div>
</body>

www.cotiinformatica.com.br 23
Apostila Struts2 Aula

StrutsTiles 02

error.jsp
error page.

www.cotiinformatica.com.br 24
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
Estrutura do preojeto...

LIBS:
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
struts2-bootstrap-plugin-1.6.1.jar
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

package entity;

public class Cliente {
private Integer idCliente;
private String nome;
private String email;

www.cotiinformatica.com.br 1
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
public Cliente() {
// TODO Auto-generated constructor stub
}

public Cliente(Integer idCliente, String nome, String


email) {
super();
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;
}

@Override
public boolean equals(Object c) {
return
this.idCliente.equals(((Cliente)c).getIdCliente());
}
}

www.cotiinformatica.com.br 2
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
package action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import
com.opensymphony.xwork2.validator.annotations.EmailValidator;
import
com.opensymphony.xwork2.validator.annotations.RequiredStringVali
dator;
import
com.opensymphony.xwork2.validator.annotations.ValidatorType;

import entity.Cliente;

public class ClienteAction extends


ActionSupport{
private Cliente cliente;
private List<Cliente> lista;
private Integer idEscolhido;

public Integer getIdEscolhido() {
return idEscolhido;
}
public void setIdEscolhido(Integer idEscolhido) {
this.idEscolhido = idEscolhido;
}
public ClienteAction() {
cliente = new Cliente();
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {

www.cotiinformatica.com.br 3
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
this.cliente = cliente;
}
public List<Cliente> getLista() {
lista = new ArrayList<Cliente>();
lista.add(new Cliente(10,"joao","joao@gmail.com"));
lista.add(new Cliente(20,"maria","maria@gmail.com"));
lista.add(new Cliente(30,"ana","ana@gmail.com"));
return lista;
}
public void setLista(List<Cliente> lista) {
this.lista = lista;
}

@Action(value="home", results={
@Result(name=SUCCESS ,location="sistema.jsp"),
@Result(name=INPUT ,location="sistema.jsp")})
public String init(){
getLista();
return SUCCESS ;
}

@Action(value="gravar", results={
@Result(name=SUCCESS ,location="resposta.jsp"),
@Result(name=ERROR,location="sistema.jsp")})
public String cadastrar(){
HttpServletRequest request=(HttpServletRequest)
ActionContext. getContext().get(ServletActionContext. HTTP_RE
QUEST );
try{
Cliente c = new Cliente();
c.setIdCliente(idEscolhido);
getLista();
cliente = lista.get(lista.indexOf(c));
request.setAttribute("msg", "<b>Cliente
Escolhido: </b>" + cliente);
return SUCCESS ;
}catch(Exception ex){
ex.printStackTrace();
request.setAttribute("msg", "Error :" + ex.getMessage());
}
return ERROR ;
}
}

www.cotiinformatica.com.br 4
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">

<display-name>StudentEnrollmentWithStruts </display-name>

<filter>
<filter-name>struts2</filter-name>
<filter-
class>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>

index.jsp
<!doctype html>
<html>

<head>
<link rel="stylesheet" href="css/bootstrap.css" >
<script type="text/javascript" src="js/jquery-
1.10.2.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<body>

<div class="container">
<div class="well">

www.cotiinformatica.com.br 5
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
<h2>Struts Annotation</h2>
</div>
<a href="home.action">Entrar no Sistema <span
class="glyphicon glyphicon-log-in"></span> </a>
</div>

</body>
</html>

sistema.jsp
<!DOCTYPE html>
<html>

<head>
<%@ taglib prefix="s" uri="/struts-tags"%>
<link rel="stylesheet" href="css/bootstrap.css" >
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<body>
<div class="container">

www.cotiinformatica.com.br 6
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
<div class="well">
<h2>Struts Annotation</h2>
</div>

<div class="col-sm-offset-1 col-sm-10">


<div class="jumbotron">
<ul class="nav nav-tabs">
<li class="active"><a href="#">Escolher Cliente</a></li>
</ul>
<p />
<div class="row">

<s:form id="form1" action="gravar.action"


theme="bootstrap" cssClass="bs-example form-horizontal"
method="post">
<div class="col-sm-10">
<s:select label="Clientes"
list="lista"
cssClass="selectpicker"
listKey="idCliente"
listValue="nome"
name="idEscolhido"
headerValue="Escolha o CLiente:"
headerKey="0"/>
</div>

<div class="col-sm-10">
<br />
<s:submit value="Enviar Dados" cssClass="btn btn-primary" />
</div>
</s:form>
<br /> ${msg}
</div>
</div>
</div>
</div>
</div>
</body>
</html>

www.cotiinformatica.com.br 7
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03

resposta.jsp
<%@ page language="java" contentType="text/html; charset=ISO-
8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
<title>Resposta</title>
<link rel="stylesheet" href="css/bootstrap.css" >
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<body>
<div class="container">
<div class="well">

www.cotiinformatica.com.br 8
Apostila Struts2 Aula

Aula03-struts_Annotation_Bootstrap 03
<h2>Struts Annotation</h2>
</div>

${msg}
</div>
</body>
</html>

www.cotiinformatica.com.br 9
Apostila Struts2 Aula

struts2_crud 04
Estrutura do projeto...

LIBS:
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
c3p0-0.9.0.jar
cglib-2.1.3.jar
commons-beanutils-1.8.0.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-digester-2.0.jar
commons-el-1.0.jar
commons-fileupload-1.0.jar
commons-lang-2.1.jar
commons-logging-1.1.1.jar
commons-validator.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
freemarker-2.3.8.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate3.jar
jakarta-oro.jar
jcommon_javadoc.jar

www.cotiinformatica.com.br 1
Apostila Struts2 Aula

struts2_crud 04
jcommon_source.jar
jcommon.jar
jstl.jar
jta.jar
log4j-1.2.15.jar
mysql-connector-java-5.1.23-bin.jar
ognl-2.6.11.jar
oro-2.0.8.jar
servlet3-api.jar
standard.jar
struts2-core-2.0.14.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="Usuario.findAll",query="from Usuario"),
@NamedQuery(name="Usuario.findByLogin" ,
query="from Usuario u where u.email =:param1 and u.senha
=:param2")
})
public class Usuario implements
Serializable{
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType. AUTO )
@Column

www.cotiinformatica.com.br 2
Apostila Struts2 Aula

struts2_crud 04
private Integer idUsuario;

@Column(unique= true, length=50,nullable= false)


private String email;

@Column(length=50, nullable= false)


private String nome;

@Column( length=100, nullable= false)


private String senha;

@Column( length=10, nullable= false)


private String perfil;

public Usuario() {
}

public Usuario(Integer idUsuario, String email, String


nome, String senha, String perfil) {
this.idUsuario = idUsuario;
this.email = email;
this.nome = nome;
this.senha = senha;
this.perfil = perfil;
}

@Override
public String toString() {
return "Usuario [idUsuario="  + idUsuario + ", email="
+ email + ", nome=" + nome + ", perfil=" + perfil + "]";
}

public Integer getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(Integer idUsuario) {
this.idUsuario = idUsuario;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getNome() {

www.cotiinformatica.com.br 3
Apostila Struts2 Aula

struts2_crud 04
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getPerfil() {
return perfil;
}
public void setPerfil(String perfil) {
this.perfil = perfil;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}

mysql_hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate
Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd">
<hibernate-configuration >

<session-factory>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </pro
perty>
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </
property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/struts2?createDatabaseIfNotExist=tru
e</property>
<property
name="hibernate.connection.username">root</property>

www.cotiinformatica.com.br 4
Apostila Struts2 Aula

struts2_crud 04
<property
name="hibernate.connection.password">coti</property>

<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>

<mapping class="entity.Usuario"/>

</session-factory>
</hibernate-configuration >

package config;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class Main {
public static void main(String[] args) {
Configuration cfg = new AnnotationConfiguration().
configure("config/mysql_hibernate.cfg.xml" );
new SchemaExport(cfg).create( true,true);
System.out.println("Tabela Gerada com Sucesso ..." );
}
}

No console...

log4j:WARN No appenders could be found for logger


(org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

drop table if exists Usuario

create table Usuario (


idUsuario integer not null auto_increment,
email varchar(50) not null unique,
nome varchar(50) not null,
perfil varchar(10) not null,
senha varchar(100) not null,

www.cotiinformatica.com.br 5
Apostila Struts2 Aula

struts2_crud 04
primary key (idUsuario)
)
Tabela Gerada com Sucesso ...

package type;

//Classe Estatica(Constante)
public enum PerfilUsuario {
 ADMINISTRADOR("adm"),USUARIO ("usu"),GUEST ("guest");

private String perfil;

PerfilUsuario(String perfil){
this.perfil = perfil;
}

public String getPerfil() {
return perfil;
}
}

www.cotiinformatica.com.br 6
Apostila Struts2 Aula

struts2_crud 04
package control;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class ClearCacheInterceptor
implements Interceptor{
private static final long serialVersionUID = 1L;

@Override
public void destroy() {
// TODO Auto-generated method stub
}

@Override
public void init() {
// TODO Auto-generated method stub
}

@Override
public String intercept(ActionInvocation invocation) throws
Exception {
HttpServletResponse response =
ServletActionContext. getResponse();
System.out.println("Chegou no Intercept ------------------" );
response.setHeader("Cache-Control", "no-cache, no-store" );
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
return invocation.invoke();
}
}

package control;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;

www.cotiinformatica.com.br 7
Apostila Struts2 Aula

struts2_crud 04
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebFilter({"/usu/*","/adm/*"})
public class Filtro implements Filter
{
public Filtro() {
}

public void destroy() {
}

public void doFilter(ServletRequest request,


ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest req= (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse)
response;
HttpSession session = req.getSession();
if (session.getAttribute("usuario")==null){
resp.sendRedirect("../index.jsp");
//va para o index.jsp
return; //para
}
//senão dá sequencia ...
chain.doFilter(request, response);
}

public void init(FilterConfig fConfig) throws


ServletException {
}
}

www.cotiinformatica.com.br 8
Apostila Struts2 Aula

struts2_crud 04
package control;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import persistence.UsuarioDao;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import entity.Usuario;

public class UsuarioAction extends


ActionSupport
implements ModelDriven<Usuario>{
private static final long serialVersionUID = 1L;

//Nome do Objeto
private Usuario usuario; //Classe Usuario
private List <Usuario> lista;

HttpServletRequest request;
HttpSession session; //Irei trabalhar com Sessão

public UsuarioAction() {
usuario = new Usuario(); //espaço no Construtor
lista =new ArrayList<Usuario>(); //construtor
}

@Override
public Usuario getModel() {
return usuario;
}
public Usuario getUsuario() {
return usuario;

www.cotiinformatica.com.br 9
Apostila Struts2 Aula

struts2_crud 04
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public static long getSerialversionuid() {
return serialVersionUID;
}

public String listar(){
return SUCCESS;
}
public List<Usuario> getLista() {
try{
lista = new UsuarioDao().findAll();
//chamada do Banco
}catch(Exception ex){
}
return lista;
}

public void setLista(List<Usuario> lista) {


this.lista = lista;
}

public String gravar(){
request = (HttpServletRequest)
ActionContext. getContext().get
(ServletActionContext. HTTP_REQUEST );
try{
new UsuarioDao().create( usuario);
getLista();
usuario = new Usuario();
request.setAttribute("msg", "Dados Gravados");
}catch(Exception ex){
request.setAttribute("msg", "Error :" + ex.getMessage());
}
return SUCCESS;
}

public String logar(){
request = (HttpServletRequest)
ActionContext. getContext().get
(ServletActionContext. HTTP_REQUEST );

www.cotiinformatica.com.br 10
Apostila Struts2 Aula

struts2_crud 04
session = request.getSession( true);
try{
Usuario resp = new UsuarioDao().findByLogin( usuario);
if (resp!=null){
usuario = new Usuario();
session.setAttribute("usuario", resp);
session.setAttribute("msg","Logado Com Sucesso" );
return SUCCESS;
} else{
session.setAttribute("usuario", null); //limpa
}
request.setAttribute("msg", "Usuario NAO LOGADO" );
return INPUT ; //sistema.jsp
}catch(Exception ex){
request.setAttribute("msg", "Error :" + ex.getMessage());
return ERROR; //erro.jsp
}
}

public String logout(){
request = (HttpServletRequest)
ActionContext. getContext().get(ServletActionContext. HTTP_REQUEST 
);
session = request.getSession( true);
try{
session.setAttribute("msg", null);
session.setAttribute("usuario", null);
session.invalidate();
return SUCCESS;
}catch(Exception ex){
request.setAttribute("msg","Error:" + ex.getMessage());
}
return ERROR;
}
}

www.cotiinformatica.com.br 11
Apostila Struts2 Aula

struts2_crud 04
package persistence;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class HibernateUtil {
private static final SessionFactory sessionFactory;

static {
try {
sessionFactory = new AnnotationConfiguration().
configure("config/mysql_hibernate.cfg.xml" ).buildSessionFactory(
);
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation
failed." + ex);
throw new ExceptionInInitializerError( ex);
}
}

public static SessionFactory getSessionFactory() {


return sessionFactory;
}
}

package persistence;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.jcommon.encryption.SimpleMD5;

import entity.Usuario;

public class UsuarioDao {
Session session;
Transaction transaction;
Query query;
Criteria criteria;

www.cotiinformatica.com.br 12
Apostila Struts2 Aula

struts2_crud 04
private void criptografia(Usuario u){
SimpleMD5 md5 = new
SimpleMD5(u.getSenha(),"cotiinformatica@gmail" );
u.setSenha(md5.toHexString());
}

public void create(Usuario u){


criptografia(u);
session = HibernateUtil. getSessionFactory().openSession();
transaction = session.beginTransaction();
session.save(u);
transaction.commit();
session.close();
}

public Usuario findByLogin(Usuario u){


criptografia(u);
session = HibernateUtil. getSessionFactory().openSession();
query = session.getNamedQuery("Usuario.findByLogin" );
query.setString("param1", u.getEmail());
query.setString("param2", u.getSenha());
Usuario resp=(Usuario) query.uniqueResult();
session.close();
return resp;
}

public List<Usuario> findAll(){
session = HibernateUtil. getSessionFactory().openSession();
query = session.getNamedQuery("Usuario.findAll");
List<Usuario> lista =query.list();
session.close();
return lista;
}
}

www.cotiinformatica.com.br 13
Apostila Struts2 Aula

struts2_crud 04
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="usuarioaction" extends="struts-default">
<interceptors>
<interceptor name="caching"
class="control.ClearCacheInterceptor"/>
<interceptor-stack name="cachingStack">
<interceptor-ref name="caching" />
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token"/>
</interceptor-stack>
</interceptors>

<action name="usuario.gravar"
class="control.UsuarioAction"
method="gravar">
<result name="success">/sistema.jsp</result>
<result name="input">/sistema.jsp</result>
<result name="error">/error.jsp</result>
</action>

<action name="usuario.listar"
class="control.UsuarioAction"
method="listar">
<result name="success">/consulta.jsp</result>
</action>

<action name="usuario.logar"
class="control.UsuarioAction"
method="logar">
<interceptor-ref name="cachingStack"/>
<result name="success">/usu/logado.jsp</result>
<result name="input">/sistema.jsp</result>
<result name="error">/error.jsp</result>
<result name="invalid.token">/sistema.jsp</result>
</action>

<action name="usuario.logout"

www.cotiinformatica.com.br 14
Apostila Struts2 Aula

struts2_crud 04
class="control.UsuarioAction"
method="logout">
<result name="input">/usu/logado.jsp</result>
<result name="success">/sistema.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>

</struts>

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">

<filter>
<filter-name>struts2</filter-name>
<filter-
class>org.apache.struts2.dispatcher.FilterDispatcher </filter-
class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<session-config>
<session-timeout>30</session-timeout>
</session-config>

<welcome-file-list>
<welcome-file>sistema.jsp</welcome-file>
</welcome-file-list>
</web-app>

www.cotiinformatica.com.br 15
Apostila Struts2 Aula

struts2_crud 04
index.jsp
<!doctype html>
<html>

<meta http-equiv="Pragma" content="no-cache">


<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<%
try {
session.setAttribute( "msg", null);
session.invalidate();
} catch (Exception ex) {
}
%>
<head>
<link rel="stylesheet" href="css/bootstrap.css">
<script type="text/javascript" src="js/jquery-
1.10.2.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<body>
<div class="container">
<div class="well">
<h2>Bem Vindo ao Sistema Struts2 </h2>
<a href="sistema.jsp" class="btn btn-
 primary">Entrar No Sistema <span class="glyphicon glyphicon-log-
in"></span></a>
</div>

<div class="col-sm-8 col-sm-offset-2">


<div class="well">

<p>O Struts 2 foi inicialmente distribuído em Janeiro


de 2001, obtendo um sucesso incrível
entre os desenvolvedores Java. O Struts na sua versão
inicial oferecia um padrão MVC
(Model-View-Controller ou Modelo-Visão-Controlador)
para desenvolvimento Java Web.
O Struts facilitava bastante o gerenciamento, a
reutilização e a manutenção do código.

www.cotiinformatica.com.br 16
Apostila Struts2 Aula

struts2_crud 04
Com o decorrer dos anos, o desenvolvimento com Struts
foi decaindo bastante, muito em
função da quantidade de código exigido para que o
desenvolvedor possa implementar as
facilidades necessárias de um aplicativo web,
portanto, uma nova proposta para uma
nova versão do Struts foi sugerida. </p>

</div>
</div>

</div>
</body>
</html>

sistema.jsp
<!DOCTYPE html>
<html>

<head>
<%@ taglib prefix="s" uri="/struts-tags"%>
<link rel="stylesheet" href="css/bootstrap.css">

www.cotiinformatica.com.br 17
Apostila Struts2 Aula

struts2_crud 04
<script type="text/javascript" src="js/jquery-
1.10.2.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<body>
<div class="container">
<div class="well">
<h2>Cadastro de Usuário em Struts2 </h2>
<s:a href="usuario.home.action" cssClass="btn btn-success">Home
<span class="glyphicon glyphicon-home"></span> </s:a>
<s:a href="usuario.listar.action" cssClass="btn btn-
warning">Consultar os Dados
<span class="glyphicon glyphicon-search"></span></s:a>
</div><!-- FECHA WELL -->

<div class="col-sm-6 col-sm-offset-3">


<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab"
href="#home">Cadastro</a></li>
<li><a data-toggle="tab"
href="#logar">Logar </a></li>
</ul>

<div class="tab-content">
<div id="home" class="tab-pane fade in active">
<s:form method="post" action="usuario.gravar">
<br />
<input type="hidden" name="usuario.perfil" value="usu">

<label for="nome">Nome :</label>


<input type="text" name="usuario.nome" id="nome"
required="required" placeholder="Entre com Nome"
title="Entre com o Padrao no Nome" pattern="[A-Z
a-z]{3,35}" class="form-control" />

<label for="email">Email :</label>


<input type="email" name="usuario.email"
id="email" required="required" placeholder="Entre com
Email" title="Entre com o Padrao no Email" class="form-
control" />

<label for="Senha">Senha :</label>


<input type="password" name="usuario.senha"
id="senha" required="required" placeholder="Entre com

www.cotiinformatica.com.br 18
Apostila Struts2 Aula

struts2_crud 04
Senha" title="Entre com o Padrao no Senha" class="form-
control" />
<br />
<input type="submit" value="Cadastrar Usuario"
class="btn btn-primary" />
</s:form>
</div><!-- FECHA DIV HOME -->

<!-- Até aqui cadastro, em baixo logar -->

<div id="logar" class="tab-pane fade">


<s:form method="post" action="usuario.logar"><br/>

<label for="email2">Email :</label>


<input type="email" name="usuario.email" id="email2"
required="required" placeholder="Entre com
Email" title="Entre com o Padrao no Email" class="form-
control" />

<label for="senha2">Senha :</label>


<input type="password" name="usuario.senha"
id="senha2" required="required" placeholder="Entre com
Senha" title="Entre com o Padrao no Senha" class="form-
control" />
<br />

<input type="submit" value="Logar" class="btn btn-primary" />


<s:token />
</s:form>
</div><!-- FECHA DIV LOGAR -->
</div><!-- FECHA TAB CONTENT -->
<br/>

<div class="panel panel-footer">


<footer>Java WebDeveloper -
www.cotiinformatica.com.br </footer>
</div><!-- FECHA PANEL FOOTER -->

${msg}
</div><!-- FECHA COL -->
</div> <!-- FECHA CONTAINER -->
</body>

</html>

www.cotiinformatica.com.br 19
Apostila Struts2 Aula

struts2_crud 04

Cadastrando...

www.cotiinformatica.com.br 20
Apostila Struts2 Aula

struts2_crud 04
Cadastrado...

Aba de Logar...

www.cotiinformatica.com.br 21
Apostila Struts2 Aula

struts2_crud 04
Logando...

Logado...

www.cotiinformatica.com.br 22
Apostila Struts2 Aula

struts2_crud 04

error.jsp
<!doctype html>
<!doctype
<html
html>>

<head
head>>
<link rel
rel=
="stylesheet" href
href=="css/bootstrap.css">
<script type
type=
="text/javascript" src
src=
="js/jquery-
1.10.2.js"></
></script
script>>
<script type
type=
="text/javascript" src
src=
="js/bootstrap.js"></
></script
script>>
</head
</head>>

<body
body>>
<div class=
class="container">
<div class
class=="well">
<h2
h2>
>Página de Erro do Sistema Struts2 </
</h2
h2>
>
<a href
href=="sistema.jsp" class
class=="btn btn-primary">Sistema
<span class
class=
="glyphicon glyphicon-log-in"></
></span
span></
></a
a>
</div
</div>
><!-- FECHA WELL -->

<div class=
class="col-sm-8 col-sm-offset-2">
<div
div>
>${msg}</
${msg}</div
div>
>
</div
</div>
><!-- FECHA COL -->
</div
</div>
><!-- FECHA CONTAINER -->

</body>
</body >
</html
</html>>

www.cotiinformatica.com.br 23
Apostila Struts2 Aula

struts2_crud 04

consulta.jsp
<!DOCTYPE html>
<html>

<head>
<%@ taglib prefix="s" uri="/struts-tags"%>
<link rel="stylesheet" href="css/bootstrap.css">
<script type="text/javascript" src="js/jquery-
1.10.2.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<body>
<div class="container">
<div class="well">
<h2>Consulta Struts Usuários </h2>
<s:a href="usuario.home.action" cssClass="btn btn-success">Home
<span class="glyphicon glyphicon-home"></span></s:a>
</div><!-- FECHA WELL -->

<div class="col-sm-8 col-sm-offset-2">


<div class="panel panel-info">

www.cotiinformatica.com.br 24
Apostila Struts2 Aula

struts2_crud 04
<div class="panel-heading">
<div class="panel-title">Consulta</div>
</div><!-- FECHA PANEL HEADING -->

<div class="panel-body">
<table class="table table-hover">
<tr>
<td>Nome</td>
<td>Email</td>
<td>Perfil</td>
</tr>
<s:iterator value="lista">
<tr>
<td><s:property value="nome" /></td>
<td><s:property value="email" /></td>
<td><s:property value="perfil" /></td>
</tr>
</s:iterator>
</table>

</div><!-- FECHA PANEL-BODY -->


</div><!-- FECHA PANEL-INFO -->

<div class="panel panel-footer">


<footer>Java WebDeveloper -
www.cotiinformatica.com.br </footer>
</div><!-- FECHA PANEL FOOTER -->
</div><!-- FECHA COL -->
</div><!-- FECHA CONTAINER -->

</body>
</html>

www.cotiinformatica.com.br 25
Apostila Struts2 Aula

struts2_crud 04

www.cotiinformatica.com.br 26
Apostila Struts2 Aula

struts2_crud 04
usu/logado.jsp
<!DOCTYPE html>
<html>

<head>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Cache-Control" content="must-revalidate">

<%@ page import="entity.Usuario"%>


<%@ taglib prefix="s" uri="/struts-tags"%>

<link rel="stylesheet" href="css/bootstrap.css">


<script type="text/javascript" src="js/jquery-
1.10.2.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
</head>

<%
response.setHeader( "Cache-Control", "no-cache");
response.setHeader( "Cache-Control", "no-store");
response.setDateHeader( "Expires", -1);
response.setHeader( "Pragma", "no-cache");
%>

<body>
<div class="container">
<div class="well">
<h3>Página de Usuário Struts2 </h3>
<s:a href="usuario.logout.action" cssClass="btn
btn-danger">Logout <span class="glyphicon glyphicon-log-
out"></span> </s:a>
</div>
<!-- FECHA WELL -->

<%
try {
if (session.getAttribute( "usuario") != null) {
Usuario resp = (Usuario) session.getAttribute( "usuario");
//Imprime o Nome, ScriptLet ...
out.print(resp.getNome());
}

www.cotiinformatica.com.br 27
Apostila Struts2 Aula

struts2_crud 04
} catch (Exception ex) {
response.sendRedirect( "../index.jsp");
}
%>
, ${msg}

</div>
<!-- FECHA CONTAINER -->
</body>
</html>

www.cotiinformatica.com.br 28
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


Estrutura do Projeto...

LIBS:
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
c3p0-0.9.0.jar
cglib-2.1.3.jar
commons-beanutils-1.7.0.jar
commons-codec-1.3.jar
commons-collections-3.1.jar
commons-digester-1.6.jar
commons-el-1.0.jar
commons-fileupload-1.0.jar
commons-lang-2.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
freemarker-2.3.8.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate3.jar
hsqldb.jar
jstl-1.1.0.jar
jta.jar
log4j-1.2.15.jar
mysql-connector-java-5.1.23-bin.jar
ognl-2.6.11.jar

www.cotiinformatica.com.br 1
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


oro-2.0.8.jar
servlet3-api.jar
standard.jar
struts2-core-2.0.11.jar
xwork-2.0.4.jar

package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType. AUTO )
private Integer idCliente;

@Column(length = 35)
private String nome;

@Column(length = 1, columnDefinition = "enum('m','f')")


private String sexo;

public Cliente() {

public Cliente(Integer idCliente, String nome, String sexo)


{
this.idCliente = idCliente;
this.nome = nome;
this.sexo = sexo;
}

public Integer getIdCliente() {
return idCliente;
}

www.cotiinformatica.com.br 2
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


public void setIdCliente(Integer idCliente) {
this.idCliente = idCliente;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
}

mysql_hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate
Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-
3.0.dtd">
<hibernate-configuration>

<session-factory>
<property
name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</pro
perty>
<property
name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</
property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3306/stru
ts2?createDatabaseIfNotExist=true</property>
<property
name="hibernate.connection.username">root</property>
<property
name="hibernate.connection.password">1234</property>

<property name="hibernate.show_sql">true</property>

www.cotiinformatica.com.br 3
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">true</property>

<mapping class="entity.Cliente"/>

</session-factory>
</hibernate-configuration>

package config;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class Main {
public static void main(String[] args) {
Configuration cfg = new
AnnotationConfiguration().configure("config/mysql_hibernate.cfg.
xml");
new SchemaExport(cfg).create(true,true);
System.out.println("Tabela Cliente gerada");
}
}

No console...
log4j:WARN No appenders could be found for logger
(org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.

drop table if exists Cliente

create table Cliente (


idCliente integer not null auto_increment,
nome varchar(35),
sexo enum('m','f'),
primary key (idCliente)
)
Tabela Cliente gerada

www.cotiinformatica.com.br 4
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05

package persistence;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class HibernateUtil {
private static final SessionFactory sessionFactory;

static {
try {
sessionFactory = new
AnnotationConfiguration().configure("config/mysql_hibernate.cfg.
xml").buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation
failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

www.cotiinformatica.com.br 5
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

package persistence;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import entity.Cliente;

public class ClienteDao {
Session session;
Transaction transaction;
Criteria criteria;
Query query;

public void create(Cliente c) throws Exception {


session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
session.save(c);
transaction.commit();
session.close();
}

public void update(Cliente c) throws Exception {


session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
session.update(c);
transaction.commit();
session.close();
}

public void delete(Cliente c) throws Exception {


session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
session.delete(c);

www.cotiinformatica.com.br 6
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


transaction.commit();
session.close();
}

public Cliente findByIde(Integer code) throws Exception{


session = HibernateUtil.getSessionFactory().openSession();
Cliente resp = (Cliente)session.get(Cliente.class, code);
session.close();
return resp;
}

public List<Cliente> findAll() {


session = HibernateUtil.getSessionFactory().openSession();
criteria = session.createCriteria(Cliente.class);
List<Cliente> lista = criteria.list();
session.close();
return lista;
}
}

package control;

import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import persistence.ClienteDao;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import entity.Cliente;

public class ClienteAction extends


ActionSupport {
private static final long serialVersionUID = 1L;

private Cliente cliente;
private String id;
private List<Cliente> clientes;

public ClienteAction() {
cliente = new Cliente();

www.cotiinformatica.com.br 7
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


clientes = new ArrayList<Cliente>();
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public List<Cliente> getClientes() {
try {
clientes = new ClienteDao().findAll();
} catch (Exception e) {
e.printStackTrace();
}
return clientes;
}
public void setClientes(List<Cliente> clientes) {
this.clientes = clientes;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public static long getSerialversionuid() {
return serialVersionUID;
}

public String cadastrarCliente() {
HttpServletRequest request = (HttpServletRequest)
ActionContext.getContext().get(ServletActionContext. HTTP_REQUEST 
);
try {
new ClienteDao().create(cliente);
request.setAttribute("msg", "Dados Gravados com Sucesso!");
} catch (Exception e) {
request.setAttribute("msg", "Error: " + e.getMessage());
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}

www.cotiinformatica.com.br 8
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


public String deletarCliente() {
HttpServletRequest request = (HttpServletRequest)
ActionContext.getContext().get(ServletActionContext. HTTP_REQUEST 
);
try {
Integer idCliente = new Integer(id);
cliente = new ClienteDao().findByIde(idCliente);
new ClienteDao().delete(cliente);
request.setAttribute("msg", "Cliente Deletado com Sucesso!");
} catch (Exception e) {
request.setAttribute("msg", "Error: " + e.getMessage());
return ERROR;
}
return SUCCESS;
}

public String listarClientes() {
return SUCCESS;
}
}

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="clienteaction" extends="struts-default">

<action name="cliente.cadastrar"
class="control.ClienteAction" method="cadastrarCliente">
<result name="success">/sistema.jsp</result>
<result name="error">/error.jsp</result>
</action>

<action name="cliente.deletar"
class="control.ClienteAction" method="deletarCliente">
<result name="success">/consulta.jsp</result>
<result name="error">/error.jsp</result>
</action>

www.cotiinformatica.com.br 9
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


<action name="cliente.listar"
class="control.ClienteAction" method="listarClientes">
<result name="success">/consulta.jsp</result>
</action>
</package>
</struts>

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_2_5.xsd"
version="2.5">

<filter>
<filter-name>struts2</filter-name>
<filter-
class>org.apache.struts2.dispatcher.FilterDispatcher</filter-
class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<session-config>
<session-timeout>30</session-timeout>
</session-config>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>

www.cotiinformatica.com.br 10
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


index.jsp
<!DOCTYPE html>
<html lang ="pt-BR">
<head>
<meta charset="utf-8">
<title>Struts2</title>

<link rel="stylesheet" type="text/css"


href="css/bootstrap.css"/>
<script type="text/javascript"
src="js/bootstrap.js"></script>

</head>
<body>
<h2 class="jumbotron">Projeto STRUTS 2.0</h2>
<div class="container">
<a href="sistema.jsp" class="btn btn-success">
<span class="glyphicon glyphicon-floppy-disk"></span>
Cadastrar </a>

<a href="cliente.listar.action" class="btn btn-warning">


<span class="glyphicon glyphicon-search"></span> Consultar
</a>

<div class="conteudo">

<h2>Struts 2 / Spring MVC / JSF - MVC</h2>


<p>
<a
href="http://struts.apache.org/">http://struts.apache.org/</a>
<br/>
Struts 2 Segue um padrao (XML), configuração ,
forma de trabalhar ...<br/>
Quem comando o Projeto Todo (struts.xml) _ Faz toda a
configuração que você
precisa para seu projeto ... Inversão de Valores ...
Quem controla a forma
de seu projeto trabalhar é um arquivo .xml</p>

<p>
Struts2 Voce tem FrameWork Potente em relacao a
Defesa a Segurança ....
</p>

www.cotiinformatica.com.br 11
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


</div><!-- FECHA CONTEUDO -->
</div><!-- FECHA CONTAINER -->
<br/><br/>
<br/><br/>
<br/><br/>
<div class="panel panel-footer" >
<blockquote class="blockquote-reverse">
<footer>Website by JavaWebDeveloper Tarde</footer>
</blockquote>
</div><!-- FECHA PANEL-FOOTER-->
</body>
</html>

sistema.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
<title>Cadastro</title>

www.cotiinformatica.com.br 12
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


<link rel="stylesheet" type="text/css" href="css/bootstrap.css"
/>
<script type="text/javascript" src="js/jquery-
2.1.4.min.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>

</head>
<body>
<h2 class="jumbotron">Projeto STRUTS 2.0</h2>
<div class="container">
<a href="index.jsp" class="btn btn-primary"> <span
class="glyphicon glyphicon-home"></span> Home
</a>&nbsp;
<button class="btn btn-success" data-
toggle="modal" data-target="#janela"> Cadastrar Cliente <span
class="glyphicon glyphicon-user"></span>
</button>
<a href="cliente.listar.action" class="btn btn-
warning">
<span class="glyphicon glyphicon-search"></span> Consultar
Cliente
</a><br /> <br />

<!-- janela modal -->


<div class="modal fade" id="janela">
<div class="modal-dialog">
<div class="modal-content">

<div class="modal-header">
<h3>Cadastro de Usuário</h3>
</div>

<div class="modal-body">

<s:form action="cliente.cadastrar" method="post">


<div class="form-group">
<label>Nome:</label>
<input type="text" class="form-control" name="cliente.nome">
</div><!-- FECHA FORM-GROUP -->

<div class="form-group">
<label>Sexo:</label>
<input type="radio" name="cliente.sexo" value="m"

www.cotiinformatica.com.br 13
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


checked="checked" >Masculino
<input type="radio" name="cliente.sexo" value="f">Feminino
</div><!-- FECHA FORM-GROUP -->

<div class="panel panel-footer">


<button type="submit" class="btn btn-success">
<span class="glyphicon glyphicon-floppy-disk"></span>
Gravar Cliente
</button>
<span>&nbsp; ${msg}</span>
</div><!-- FECHA PANEL-FOOTER -->

</s:form>
</div><!-- FECHA DIV MODAL-BODY -->
</div><!-- FECHA MDOAL CONTENT -->
</div><!-- FECHA MODAL-DIALOG -->
</div><!-- FECHA MODAL FADE -->
</div><!-- FECHA CONTAINER -->
</body>
</html>

www.cotiinformatica.com.br 14
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


Clicando em cadastrar...

Cadastrando...

www.cotiinformatica.com.br 15
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


consulta.jsp
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Consulta</title>

<link rel="stylesheet" type="text/css"


href="css/bootstrap.css"/>
<script type="text/javascript"
src="js/bootstrap.js"></script>

<s:head/></head>

<h2 class="jumbotron">Projeto STRUTS 2.0</h2>

<div class="container">

<a href="index.jsp" class="btn btn-primary">


<span class="glyphicon glyphicon-home"></span> Home
</a>&nbsp;
<a href="sistema.jsp" class="btn btn-success">
<span class="glyphicon glyphicon-floppy-disk"></span>
Cadastrar Cliente
</a>&nbsp;
<a href="cliente.listar.action" class="btn btn-warning">
<span class="glyphicon glyphicon-search"></span>
Consultar Cliente
</a><br/><br/>

<h4>${msg}</h4>

<div class="col-sm-8 col-sm-offset-2">


<div class="panel panel-primary">
<div class="panel-heading">Consulta de Clientes
</div><!-- FECHA PANEL-HEADING -->
<table class="table table-hover">
<tr>
<td><b>idCliente</b></td>
<td><b>Nome</b></td>
<td><b>Sexo</b></td>

www.cotiinformatica.com.br 16
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


<td><b>Excluir</b></td>
</tr>

<s:iterator value="clientes" id="linha">


<tr>
<td> <s:property value="idCliente"/> </td>
<td> <s:property value="nome"/> </td>
<td> <s:property value="sexo"/> </td>
<td>
<s:form action="cliente.deletar.action">
<s:hidden name="id" value="%{idCliente}"></s:hidden>
<button type="submit" class="btn btn-danger">
<span class="glyphicon glyphicon-trash"></span>
</button>
</s:form>
</td>
</tr>
</s:iterator>
</table>
</div><!-- FECHA PANEL-PRIMARY -->
</div><!-- FECHA DIV COL-SM -->
</div><!-- FECHA CONTAINER -->
<div class="panel panel-footer" >
<blockquote class="blockquote-reverse">
<footer>Website by JavaWebDeveloper Tarde</footer>
</blockquote>
</div><!-- FECHA PANEL-FOOTER-->

</body>
</html>

www.cotiinformatica.com.br 17
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05

Apagando carol...

www.cotiinformatica.com.br 18
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05


error.jsp
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Erro</title>

<link rel="stylesheet" type="text/css"


href="css/bootstrap.css"/>
<script type="text/javascript"
src="js/bootstrap.js"></script>

<style type="text/css">
body {
background-image: url("img/404-10.jpg");
background-repeat: no-repeat;
background-attachment: fixed 
;
background-size: cover;
}
</style>
</head>

<body>
<div class="container">
<br/>
<a href="index.jsp" class="btn btn-primary">
<span class="glyphicon glyphicon-home"></span> Home
</a>
<h4>${msg}</h4>
</div><!-- FECHA CONTAINER -->
</body>
</html>

www.cotiinformatica.com.br 19
Apostila Struts2 Aula

Struts Cadastrar, Modal, Consultar 05

www.cotiinformatica.com.br 20
Apostila Struts2 Aula

Struts Select Bootstrap 06


Estrutura do projeto...

LIBS:
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
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

www.cotiinformatica.com.br 1
Apostila Struts2 Aula

Struts Select Bootstrap 06


package entity;

public class Cliente {

private Integer idCliente;
private String nome;
private String email;

public Cliente() {
// TODO Auto-generated constructor stub
}

public Cliente(Integer idCliente, String nome, String


email) {
super();
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 2
Apostila Struts2 Aula

Struts Select Bootstrap 06


@Override
public boolean equals(Object c) {
return
this.idCliente.equals(((Cliente)c).getIdCliente());
}
}

package action;

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;

import entity.Cliente;

public class ClienteAction extends


ActionSupport{
private Cliente cliente;
private List<Cliente> lista;
private Integer idEscolhido;

public Integer getIdEscolhido() {
return idEscolhido;
}
public void setIdEscolhido(Integer idEscolhido) {
this.idEscolhido = idEscolhido;
}
public ClienteAction() {
cliente = new Cliente();
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}

www.cotiinformatica.com.br 3
Apostila Struts2 Aula

Struts Select Bootstrap 06


public List<Cliente> getLista() {
lista = new ArrayList<Cliente>();
lista.add(new Cliente(10,"joao","joao@gmail.com"));
lista.add(new Cliente(20,"maria","maria@gmail.com"));
lista.add(new Cliente(30,"ana","ana@gmail.com"));
return lista;
}

public void setLista(List<Cliente> lista) {


this.lista = lista;
}
public String init(){
getLista();
return SUCCESS ;
}

public String enviar(){
HttpServletRequest request=(HttpServletRequest)
ActionContext. getContext().get(ServletActionContext. HTTP_RE
QUEST );
try{
Cliente c = new Cliente();
c.setIdCliente(idEscolhido);
getLista();
cliente = lista.get(lista.indexOf(c));
request.setAttribute("msg", "Cliente Escolhido: "  + cliente);
return SUCCESS ;
}catch(Exception ex){
ex.printStackTrace();
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" >

www.cotiinformatica.com.br 4
Apostila Struts2 Aula

Struts Select Bootstrap 06


<struts>

<package name="clienteaction" extends="struts-default">

<action name="home"
class="action.ClienteAction"
method="init">
<result name="success">/sistema.jsp</result>
</action>

<action name="cliente.enviar"
class="action.ClienteAction"
method="enviar">
<result name="success">/resposta.jsp</result>
<result name="error">/sistema.jsp</result>
</action>

</package>
</struts>

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >
<display-name>struts2_select_bootstrap </display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-
class>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>

www.cotiinformatica.com.br 5
Apostila Struts2 Aula

Struts Select Bootstrap 06


index.jsp
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
<link rel="stylesheet" href="bootstrap//css/bootstrap.css" >
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
<title>Index</title>
</head>

<body>
<div class="container">
<div class="well">
<h2><center>Sistema Struts2</center></h2>
<a href="home.action" class="btn btn-primary">
<span class="glyphicon glyphicon-log-in"></span>
Entrar no Sistema</a>
</div>
</div>
</body>
</html>

www.cotiinformatica.com.br 6
Apostila Struts2 Aula

Struts Select Bootstrap 06

sistema.jsp
<!DOCTYPE html>
<html>
<head>

<%@ taglib prefix="s" uri="/struts-tags"%>


<link rel="stylesheet" href="bootstrap//css/bootstrap.css" >
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
</head>

<body>
<div class="container">
<div class="col-sm-offset-1 col-sm-10">
<div class="jumbotron">
<ul class="nav nav-tabs">
<li class="active"><a
href="#">Escolher Cliente</a></li>
</ul><p />

www.cotiinformatica.com.br 7
Apostila Struts2 Aula

Struts Select Bootstrap 06


<div class="row">
<div class="col-sm-6 col-sm-offset-2">
<s:form id="form1" action="cliente.enviar"
cssClass="form" method="post">
<s:select list="lista"
cssClass="form-control"
listKey="idCliente"
listValue="nome"
name="idEscolhido"
headerValue="Escolha o CLiente"
headerKey="0" />
<br/>
<s:submit value="Enviar Dados" cssClass="btn btn-primary" />
</s:form>
<br /> ${msg}
</div>
</div>
</div>
</div>
</div>
</body>

</html>

www.cotiinformatica.com.br 8
Apostila Struts2 Aula

Struts Select Bootstrap 06


Escolhendo o cliente...

resposta.jsp
<%@ page language="java" contentType="text/html; charset=ISO-
8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
<link rel="stylesheet" href="bootstrap//css/bootstrap.css" >
<script type="text/javascript"
src="bootstrap/js/jquery.js"></script>
<script type="text/javascript"
src="bootstrap/js/bootstrap.js"></script>
<title>Resposta</title>
</head>

<body>

www.cotiinformatica.com.br 9

Вам также может понравиться