
LivroAction.java
package br.com.livrariaweb.controle;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import br.com.livrariaweb.entidades.Livro;
import br.com.livrariaweb.servico.LivroServico;
public class LivroAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LivroServico servico = new LivroServico();
List l = servico.listar();
request.setAttribute("livros", l);
return mapping.findForward("listar");
}
}
LivroAction.java
package br.com.livrariaweb.controle;
import org.apache.struts.action.ActionForm;
public class LivroForm extends ActionForm{
private static final long serialVersionUID = 1L;
private Integer id;
private String titulo;
private String autor;
private Integer nroEdicao;
private Double valor;
// gets e sets
}
LivroSalvarAction.java
package br.com.livrariaweb.controle;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import br.com.livrariaweb.entidades.Livro;
import br.com.livrariaweb.servico.LivroServico;
public class LivroSalvarAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Livro l = new Livro();
BeanUtils.copyProperties(l, (LivroForm) form);
LivroServico s = new LivroServico();
s.salvar(l);
return mapping.findForward("listar");
}
}
LivroAction.java
package br.com.livrariaweb.entidades;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Livro implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String titulo;
private String autor;
private Integer nroEdicao;
private Double valor;
// gets e sets
}
LivroServico.java
package br.com.livrariaweb.servico;
import java.util.List;
import org.hibernate.Session;
import br.com.livrariaweb.entidades.Livro;
import br.com.livrariaweb.util.HibernateUtil;
public class LivroServico {
public Livro salvar(Livro livro) {
Session s = HibernateUtil.getSessionFactory().openSession();
s.beginTransaction();
s.save(livro);
s.getTransaction().commit();
s.close();
return livro;
}
@SuppressWarnings("unchecked")
public List listar() {
Session s = HibernateUtil.getSessionFactory().openSession();
s.beginTransaction();
List l = s.createCriteria(Livro.class).list();
s.getTransaction().commit();
s.close();
return l;
}
}
HibernateUtil.java
package br.com.livrariaweb.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Criando a SessionFactory apartir no hibernate.cfg.xml
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Não foi possivel criar a SessionFactory." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
criar.jsp
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%>
<html:html>
<body>
<html:form action="/LivroSalvar.do" focus="titulo">
<h1>Criar Livro</h1>
<p><b>Título</b><br>
<html:text property="titulo"></html:text></p>
<p><b>Autor</b><br>
<html:text property="autor"></html:text></p>
<p><b>Número da Edição</b><br>
<html:text property="nroEdicao"></html:text></p>
<p><b>Valor</b><br>
<html:text property="valor"></html:text></p>
<html:submit>Salvar</html:submit>
</html:form>
</body>
</html:html>
listar.jsp
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%>
<html:html>
<body>
<h1>Livros</h1>
<table border="1" cellpadding="1">
<tr>
<th>Titulo</th>
<th>Autor</th>
<th>Valor</th>
</tr>
<logic:iterate id="l" name="livros">
<tr>
<td><bean:write name="l" property="titulo" /></td>
<td><bean:write name="l" property="autor" /></td>
<td><bean:write name="l" property="valor" /></td>
</tr>
</logic:iterate>
</table>
<p><html:link href="jsp/livro/criar.jsp" >Criar Livro</html:link></p>
</body>
</html:html>
inicio.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="ISO-8859-1"%>
<!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">
<title>Aplicacao Struts</title>
</head>
<body>
Aplicacao Struts no Ar!
<br>
<a href="<%=request.getContextPath()%>/Livros.do">Livros</a>
</body>
</html>
index.jsp
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<logic:redirect forward="inicio"/>
struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- Definicao dos Formulario de Beans -->
<form-beans>
<form-bean name="livroForm"
type="br.com.livrariaweb.controle.LivroForm" />
</form-beans>
<!-- Definicao de Excecoes Globais -->
<global-exceptions></global-exceptions>
<!-- Definicao de Redirecionamento Global -->
<global-forwards>
<forward name="inicio" path="/Inicio.do" />
</global-forwards>
<!-- Mapeamento de Acoes -->
<action-mappings>
<action path="/Inicio" forward="/jsp/inicio.jsp" />
<action path="/Livros"
type="br.com.livrariaweb.controle.LivroAction">
<forward name="listar" path="/jsp/livro/listar.jsp" />
</action>
<action path="/LivroSalvar"
type="br.com.livrariaweb.controle.LivroSalvarAction" name="livroForm"
scope="request" input="/jsp/livro/criar.jsp">
<forward name="listar" path="/Livros.do" redirect="true"/>
</action>
</action-mappings>
<!-- Arquivo de Definicao de Mensagens -->
<message-resources parameter="MessageResources" />
</struts-config>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Aplicacao Struts</display-name>
<!-- Configuracoes do Strtuts -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Pagina Inicial -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Resposta ao comentário do Renan:
Renan, esse é um assunto que iremos tratar na próxima aula. Até agora as nossas classes de ação elas herdam de "Action" mas temos uma outra classe também do struts que é chamada de "DispatchAction". Essa nova classe permite implementarmos diversos métodos dentro de uma única classe de ação. A assinatura do método vai ser a mesma para o método "execute".
Por exemplo:
public final class UsuarioAction extends DispatchAction {
public ActionForward novo (ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// sua acao...
}
public ActionForward salva (ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// // sua acao...
}
public ActionForward edita (ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// // sua acao...
}
}
Só tem um detalhe o mapeamento da sua action vai precisar de mais um parametro, o "parameter":
<action path="/Usuario"
type="br.com.loteriaweb.controle.UsuarioAction"
name="usuarioForm"
scope="request"
input="/jsp/usuario/cria.jsp"
parameter="submit"/>
ele corresponde ao método que você vai acessar. Ou seja. no seu formulario vc precisa ter um campo hidden com nome de submit que informa a ação que será executada. Vc pode utilizar um javascript para controlar essa decisão. Não fico muito feliz quando tenho que utilizar javascript então na aula eu mostro uma dica boa.