Bom dia pessoal.
Estou com um problema na hora de exibir os dados vindo do BD e não consigo resolver. Uso Hibernate (annotations), Struts(xml), Tomcat, Mysql e JSTL.
O problema é o seguinte: quando eu executo minha aplicação, pela primeira vez, os dados que vem do BD são mostrado exatamente como estão gravados, sem problemas nenhum, mas isso só acontece quando eu executo pela primeira vez. Quando começo a utilizar a aplicação e inserir novos dados e/ou atualizo os existentes, começa o problema, todo dado que é inserido ou alterado não é exibido corretamente, é salvo no BD certo, mas é exibido errado, ele exibe dados antigos, ás vezes não exibe, fica muito estranho. Por exemplo, tenho cadastro de professores, se eu cadastro um novo a foto não aparece após a inserção, tenho que ficar atualizando várias vezes para ver se vai aparecer, o que nem sempre acontece. Se eu atualizo o nome desse professor novo, as vezes, aparece o nome antigo, as vezes o novo e no BD está certo. Já mexi em cache do MySQL, já mexi no hibernate.cfg.xml colocando propriedades que possam tirar o cache também, enfim, já fiz várias coisas e não consigo resolver esse problema, se alguem souer o que pode ser e puder me ajudar, agradeço.
Sem olhar o código é complicado dizer, mas já passei por situações onde o HTML estava escrito errado e mantinha os dados no cache do navegador.
Eu to achando que é isso sim, é tanto codigo que nem sei qual postar.
Como não estou no trabalho, amanha posto alguma coisa aqui pra ver se voce podem me ajudar.
Vou postar alguns codigos aqui pra voces verem se da pra me ajudar.
As linhas com session são os varios testes que estou fazendo e até agora nada.
Action:
[code]
public class ListarTodosFuncionariosAction extends org.apache.struts.action.Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Session session = HibernateUtil.getSession();
session.clear();
List<Funcionario> listaFuncionarios =
new FuncionarioDAO(session, Funcionario.class).
listarTodosFuncionariosAtivos();
request.setAttribute("listaFuncionarios", listaFuncionarios);
session.flush();
session.clear();
session.close();
return mapping.findForward("ok");
}
}[/code]
DAO:
public class FuncionarioDAO extends GenericDAO<Funcionario> {
public FuncionarioDAO(Session session, Class<?> classe) {
super(session, classe);
}
public List<Funcionario> listarTodosFuncionariosAtivos()
{
session.clear();
Criteria c = session.createCriteria(Funcionario.class);
c.add(Restrictions.eq("situacao", "Ativo"));
c.addOrder(Order.asc("nome"));
session.evict(c);
session.clear();
c.setCacheMode(CacheMode.PUT);
c.setCacheable(false);
return c.list();
}
}
JSP:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ 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://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<jsp:useBean id="data" class="java.util.Date"/>
<!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=UTF-8">
<title><bean:message key="catalogo.titulo"/></title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/catalogo.css" type="text/css" />
<script type="text/javascript">
</script>
</head>
<body>
<div id="data_topo"><span id="fonte10"><b><fmt:formatDate value="${data}" dateStyle="full"/></b></span></div>
<div id="topo">
<a href="${pageContext.request.contextPath}/inicio.do"><div id="topo_logo" title="Home"></div></a>
<jsp:include page="../uteis/menu.jsp"></jsp:include>
</div>
<div id="conteudo">
<br />
<h3 align="center">
Corpo Administrativo PUNF
<br />
Total: ${total}
</h3>
<c:choose>
<c:when test="${empty listaFuncionarios}">
<h4 align="center">Nenhum funcionário encontrado.</h4>
<br />
</c:when>
<c:otherwise>
<c:forEach var="listaInstituicoes" items="${listaInstituicoes}">
<fieldset id="listarTodos">
<legend> ${listaInstituicoes.nomeFantasia} </legend>
<br />
<c:forEach var="listaFuncionarios" items="${listaFuncionarios}">
<c:if test="${listaFuncionarios.instituicao.id == listaInstituicoes.id}">
<table border="1" align="center" cellpadding="2" cellspacing="8" width="85%">
<tr>
<td align="center" width="130">
<c:choose>
<c:when test="${usuario.tipoUsuario.tipo == 'admin'}">
<a href="${pageContext.request.contextPath}/dadosColaborador.do?id=${listaFuncionarios.id}&tipo=funcionario">
<c:choose>
<c:when test="${empty listaFuncionarios.foto.id}">
<img src="${pageContext.request.contextPath}/imagens/sem.jpg" width="105" height="130" />
</c:when>
<c:otherwise>
<img src="ExibirImagem?id=${listaFuncionarios.foto.id}" width="105" height="130" />
</c:otherwise>
</c:choose>
</a>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${empty listaFuncionarios.foto.id}">
<img src="${pageContext.request.contextPath}/imagens/sem.jpg" width="105" height="130" />
</c:when>
<c:otherwise>
<img src="ExibirImagem?id=${listaFuncionarios.foto.id}" width="105" height="130" />
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
</td>
<td>
<b> Nome:</b> ${listaFuncionarios.nome}<br />
<b> Sexo:</b>
<c:choose>
<c:when test="${listaFuncionarios.sexo == 'M'}">
Masculino
</c:when>
<c:otherwise>
Feminino
</c:otherwise>
</c:choose>
<b>Nascimento:</b> <fmt:formatDate value="${listaFuncionarios.dataNascimento}" type="date" pattern="dd/MM/yyyy"/><br />
<b> Telefone 1:</b> ${listaFuncionarios.telefone1}
<b> Telefone 2:</b> ${listaFuncionarios.telefone2}<br />
<b> Celular 1: </b> ${listaFuncionarios.celular1}
<b> Celular 2: </b> ${listaFuncionarios.celular2}<br />
<b> Email Institucional:</b> <a href="mailto:${listaFuncionarios.emailInstitucional}">${listaFuncionarios.emailInstitucional}</a> <br />
<b> Email Pessoal:</b> <a href="mailto:${listaFuncionarios.emailPessoal}">${listaFuncionarios.emailPessoal}</a><br />
<b> SIAPE/Matrícula:</b> ${listaFuncionarios.siape}
<b>Admissão:</b> <fmt:formatDate value="${listaFuncionarios.dataAdmissao}" type="date" pattern="dd/MM/yyyy"/><br />
<b> Lattes:</b> <a href="${listaFuncionarios.lattes}" target="_blank">${listaFuncionarios.lattes}</a><br />
<b> Cargo:</b> ${listaFuncionarios.cargo.cargo}
<c:if test="${listaFuncionarios.nivel != 0}">
<b>Nível:</b> ${listaFuncionarios.nivel}
</c:if>
<br />
<b> Função:</b> ${listaFuncionarios.funcao.funcao}<br />
<b> Setor:</b> ${listaFuncionarios.setor.nome}<br />
</td>
</tr>
</table>
</c:if>
</c:forEach>
<br />
</fieldset>
<br />
</c:forEach>
</c:otherwise>
</c:choose>
<div id="botoes">
<input type="button" value="Voltar" onclick="javascript:history.go(-1)" />
</div>
</div>
<jsp:include page="../uteis/rodape.html"></jsp:include>
</body>
</html>
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</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/catalogo?autoReconnect=true&useUnicode=true&characterEnconding=utf8</property>
<property name="hibernate.connection.username">cat</property>
<property name="hibernate.connection.password">123</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="hibernate.cache.query_cache_factory">false</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<mapping class="catalogo.modelo.Usuario"/>
<mapping class="catalogo.modelo.TipoUsuario"/>
<mapping class="catalogo.modelo.Colaborador"/>
<mapping class="catalogo.modelo.Funcionario"/>
<mapping class="catalogo.modelo.TipoFuncionario"/>
<mapping class="catalogo.modelo.Setor"/>
<mapping class="catalogo.modelo.Cargo"/>
<mapping class="catalogo.modelo.Setor"/>
<mapping class="catalogo.modelo.TipoProfessor"/>
<mapping class="catalogo.modelo.Professor"/>
<mapping class="catalogo.modelo.Curso"/>
<mapping class="catalogo.modelo.Instituicao"/>
<mapping class="catalogo.modelo.Estado"/>
<mapping class="catalogo.modelo.Endereco"/>
<mapping class="catalogo.modelo.Funcao"/>
<mapping class="catalogo.modelo.Foto"/>
<mapping class="catalogo.modelo.Log"/>
</session-factory>
</hibernate-configuration>