Problema com Data + JSP

22 respostas
Raafer

Bom dia pessoal, gostaria de uma ajuda

Não consigo exibir a data do meu BD Mysql no JSP.
Esta é uma duvida que ainda persiste mesmo depois de ter lido alguns artigos aqui do forum.

Estou tentando exibir usando o ResultSet

public List<Chamado>getLista()throws SQLException{
	
	
		//prepara o statment para a conexao
		PreparedStatement stmt=this.connection.prepareStatement("select c.Cod,c.Login,c.Categoria,c.Data_Abertura,c.Prioridade from Chamado c INNER JOIN Usuario u on c.Login=u.Login ");
		ResultSet rs=stmt.executeQuery();
		List<Chamado>chamados=new ArrayList<Chamado>();
		
		while(rs.next()){
			
			Chamado chamado=new Chamado();
			
			chamado.setCod(rs.getInt("Cod"));
			chamado.setLogin(rs.getString("Login"));
			chamado.setCategoria(rs.getString("Categoria"));
			chamado.setData_Abertura(rs.getString("Data_Abertura"));
			chamado.setPrioridade(rs.getString("Prioridade"));
			
			//adicionando o objeto a lista
			chamados.add(chamado);
			
		}
		rs.close();
		stmt.close();
		
		return chamados;
	
	}

Gostaria de uma ajuda pois ainda nao consigui exibir o campo Data_Abertura no meu JSP

22 Respostas

caiomacedor

Raafer, no Bean Chamado, essa variavel data_Abertura é de que tipo?

Raafer

No bean essa variavel é do tipo String Data_Abertura.

public class Chamado { private int Cod; private String Descricao; private String Categoria; private String Prioridade; private String Status; private String Data_Abertura; private String Login; }

caiomacedor

Escuta você não tem os metodos Getters and Setters nessa classe? Se não tiver você tera que lococar.

Raafer

Tenho sim os geters(); and seters();

import java.sql.Date;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Chamado {
	private int Cod;
	private String Descricao;
	private String Categoria;
	private String Prioridade;
	private String Status;
	private String Data_Abertura;  
	private String Login;
	
	//Metodo para gravar no banco
	public String formatDateJdbc(String date){   
	    SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");   
	    try {
	    java.util.Date d1 = null;   
	       
	        d1 = f.parse(date);               
	     
	       
	    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
	       
	    date = format.format(d1);   
	    } catch (Exception e) {   
	        e.printStackTrace();   
	    } 
	    return date;           
	      
	}   
	   
//	metodo para mostrar para o usuario   
	public static String formatDateUser(String data){   
	    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
	    try { 
	    	java.util.Date d1 = null;   
	     
	        d1 = f.parse(data);               
	       
	    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");   
	       
	    data = format.format(d1);   
	    } catch (Exception e) {   
	        e.printStackTrace();   
	    }   
	    
	    return data;          
	       
	}
	
	public String getDate_Abertura() {
		   String data_abertura = this.formatDateUser(Data_Abertura);;
		return data_abertura;
		   
		    } 
		
		public void setData_Abertura(String data_abertura) {
			data_abertura=this.formatDateUser(Data_Abertura);
		}
	
	public String getLogin() {
		return Login;
	}
	public void setLogin(String login) {
		Login = login;
	}
	
	
	public String getCategoria() {
		return Categoria;
	}
	public void setCategoria(String categoria) {
		Categoria = categoria;
	}
	public int getCod() {
		return Cod;
	}
	public void setCod(int cod) {
		Cod = cod;
	}
	public String getDescricao() {
		return Descricao;
	}
	public void setDescricao(String descricao) {
		Descricao = descricao;
	}
	public String getPrioridade() {
		return Prioridade;
	}
	public void setPrioridade(String prioridade) {
		Prioridade = prioridade;
	}
	public String getStatus() {
		return Status;
	}
	public void setStatus(String status) {
		Status = status;
	}
	
	
}
caiomacedor

Posta ai teu JSP?

Raafer
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<html>

<title>Sistema </title>
     
     <c:forEach var="chamado"items="${chamados}">     
   {chamado.cod}<br/>
   {chamado.login}<br/>
   {chamado.data_abertura}<br/>
   {chamado.categoria}<br/>
   {chamado.prioridade}<br/>

      </c:forEach>
 


</html>
Raafer

Estou usando Struts tambem

caiomacedor

Cara aparentemente esta correto, Faz assim, Roda isso ai em modo Debug, e da uma olhada se nessa list “chamados” esta a variavel da data esta chegando preenchida.

Raafer

É caiomacedor, esta apresentanto um erro .

Ele fala que existe uma Thread na classe no bean Chamado

caiomacedor

tem como colar aqui o erro? mas ai vc coloca o erro dentro dessas tag erro

Raafer

Está aqui o erro

TesteDebug at localhost:1166 Thread [main] (Suspended (exception NullPointerException)) SimpleDateFormat.parse(String, ParsePosition) line: not available SimpleDateFormat(DateFormat).parse(String) line: not available Chamado.formatDateUser(String) line: 42 Chamado.setData_Abertura(String) line: 62 ChamadoDAO.getLista() line: 72 TesteDebug.main(String[]) line: 17 Thread [MySQL Statement Cancellation Timer] (Running)

caiomacedor

pelo o que costa no erro a variavel DateFormat esta chegado null Brother

Raafer

Entao, no meu ChamadoDAO o metodo adicionaChamado usa o TimeStamp pra add a date/time

public void adiciona(Chamado chamado){
		try{
			//Prepara o statment para conexoes
			PreparedStatement stmt=this.connection.prepareStatement("insert into Chamado (Data_Abertura,Login,Descricao,Categoria,Prioridade) values (?,?,?,?,?)");
			
			//Seta os valores para inserção
			java.util.Date date=new java.util.Date();
			stmt.setTimestamp(1, new java.sql.Timestamp(date.getTime()));
			stmt.setString(2, chamado.getLogin());
			stmt.setString(3, chamado.getDescricao());
			stmt.setString(4, chamado.getCategoria());
			stmt.setString(5, chamado.getPrioridade());
			
			
			
			//Executa
			stmt.execute();
			//Fecha
			stmt.close();
		}catch(SQLException e){
			System.out.println("Erro ao tentar adicionar novo Chamado>>>\t"+e.getMessage()+"<<<<<<");
			
		}
	}

No meu Mysql aparece a Date/Time normal

será que pelo fato de ser TimeStamp o DateFormat nao identifica ?

caiomacedor

Meu Bean:

public class Usuario implements Serializable {
        private Date dtCriacao;
        
        public Date getDtCriacao() {
		return dtCriacao;
	}
	public void setDtCriacao(Date dtCriacao) {
		this.dtCriacao = dtCriacao;
	}
}
Minha Action:
public class PesquisarUsuariosAction extends Action {
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		UsuarioDAO dao = new UsuarioDAO();
		Collection<Usuario> collection = new ArrayList<Usuario>();
		collection = dao.pesquisar();
		
		if(!collection.equals("") && collection != null) {
			request.setAttribute("collection", collection);
		}else {
			request.setAttribute("collection", "Não Existe Dados na base");
		}
		form.reset(mapping, request);
		return mapping.findForward("success");
	}
}
Meu Form:
public class UsuarioForm extends ActionForm {
private static final long serialVersionUID = 1L;
	
	private Usuario usuario;

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		super.reset(mapping, request);
		this.usuario = new Usuario();
	}
}
Meu DAO:
public class UsuarioDAO extends ConnectionFactory {
	
	public UsuarioDAO() {
		super();
		// TODO Auto-generated constructor stub
	}
	
		public List<Usuario> pesquisar() throws SQLException {
		this.connection = ConnectionFactory.getInstance().getConnection();
		StringBuffer sql = new StringBuffer();
		ResultSet rs = null;
		sql.append(" SELECT us.dtCriacao FROM usuario us ");
		List<Usuario> lista = new ArrayList<Usuario>();
		try {
			PreparedStatement pstmt = this.connection.prepareStatement(sql.toString());
			rs = pstmt.executeQuery();
			while(rs.next()) {
				Usuario usuario = new Usuario();
				usuario.setDtCriacao(rs.getTimestamp(5));
				lista.add(usuario);
			}
			pstmt.close();
			rs.close();
			connection.close();
			
		} catch (SQLException e) {
			throw new SQLException(e.getMessage());
		}
		return lista;
	}
}
NO JSP:
<c:forEach var="user" items="${collection}" varStatus="id">
	<tr>
		<td>${user.dtCriacao}</td>
	</tr>
</c:forEach>
caiomacedor

Desculpa esquecce se um detalhe:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <fmt:formatDate pattern="dd/MM/yyyy HH:mm:ss" value="${lista.dtCriacao}" />

isso no lugar daquele ${dtCriacao}

caiomacedor

Raafer ae conseguiu resolver o teu problema? Posta ai se sim ou não…

Raafer

Depois de fazer algumas alteraçoes o problema agora nao eh mais no DateFormat.Quando eu Debug ele me retorna todos os campos de data_abertura como Null

Estou vendo oq pode ser de errado

Raafer

è cara ate tentei mas não ta dando certo.
No meu Banco Mysql no campo Data_Abertura aparace a data a hora e os minutos.Mas na hora de exibir no JSP ele continua dando o mesmo erro

Thread [http-8080-1] (Suspended (exception NullPointerException)) JspServletWrapper.handleJspException(Exception) line: 492 JspServletWrapper.service(HttpServletRequest, HttpServletResponse, boolean) line: 357 JspServlet.serviceJspFile(HttpServletRequest, HttpServletResponse, String, Throwable, boolean) line: 320 JspServlet.service(HttpServletRequest, HttpServletResponse) line: 266 JspServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 803 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 290 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206 ApplicationDispatcher.invoke(ServletRequest, ServletResponse, ApplicationDispatcher$State) line: 654 ApplicationDispatcher.processRequest(ServletRequest, ServletResponse, ApplicationDispatcher$State) line: 445 ApplicationDispatcher.doForward(ServletRequest, ServletResponse) line: 379 ApplicationDispatcher.forward(ServletRequest, ServletResponse) line: 292 PerformForward.handleAsForward(String, ServletContext, HttpServletRequest, HttpServletResponse) line: 113 PerformForward.perform(ActionContext, ForwardConfig) line: 96 PerformForward(AbstractPerformForward).execute(ActionContext) line: 54 PerformForward(ActionCommandBase).execute(Context) line: 51 ChainBase.execute(Context) line: 190 LookupCommand.execute(Context) line: 304 ChainBase.execute(Context) line: 190 ComposableRequestProcessor.process(HttpServletRequest, HttpServletResponse) line: 283 ActionServlet.process(HttpServletRequest, HttpServletResponse) line: 1913 ActionServlet.doGet(HttpServletRequest, HttpServletResponse) line: 449 ActionServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 690 ActionServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 803 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 290 ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206 StandardWrapperValve.invoke(Request, Response) line: 230 StandardContextValve.invoke(Request, Response) line: 175 StandardHostValve.invoke(Request, Response) line: 128 ErrorReportValve.invoke(Request, Response) line: 104 StandardEngineValve.invoke(Request, Response) line: 109 CoyoteAdapter.service(Request, Response) line: 261 Http11Processor.process(Socket) line: 844 Http11Protocol$Http11ConnectionHandler.process(Socket) line: 581 JIoEndpoint$Worker.run() line: 447 Thread.run() line: not available

Só que se eu tirar do List o campo Data_Abertura, exibe os outros dados normal.

caiomacedor

Cara você notou que esta dando um NullPointException, isso significa que o valor da data esta chegando null. Tenta fazer os Getters e Setters no modo normal como eu te passei. Ai na JSP você faz a Formatação usudo o fmt do JSTL.

caiomacedor

Ou faça o Seguinte, se você quiser me mando nesse email [email removido] o teu projeto Compactado que na hora em que eu chegar em casa eu dou uma olhada e tento corrigir o erro pra vc.

Raafer

Exatamente como vc fez

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Chamado {
	private int Cod;
	private String Descricao;
	private String Categoria;
	private String Prioridade;
	private String Status;
	private Date Data_Abertura;  
	private String Login;
	
	//Metodo para gravar no banco
	public String formatDateJdbc(String date){   
	    SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");   
	    try {
	    java.util.Date d1 = null;   
	       
	        d1 = f.parse(date);               
	     
	       
	    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
	       
	    date = format.format(d1);   
	    } catch (Exception e) {   
	        e.printStackTrace();   
	    } 
	    return date;           
	      
	}   
	   
//	metodo para mostrar para o usuario   
	public static String formatDateUser(String data){   
	    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
	    try { 
	    	java.util.Date d1 = null;   
	     
	        d1 = f.parse(data);               
	       
	    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");   
	       
	    data = format.format(d1);   
	    } catch (Exception e) {   
	        e.printStackTrace();   
	    }   
	    
	    return data;          
	       
	}
	
	 
		
		
	
	public Date getData_Abertura() {
		return Data_Abertura;
	}

	public void setData_Abertura(Date Data_Abertura) {
		this.Data_Abertura = Data_Abertura;
	}

	public String getLogin() {
		return Login;
	}
	public void setLogin(String login) {
		Login = login;
	}
	
	
	public String getCategoria() {
		return Categoria;
	}
	public void setCategoria(String categoria) {
		Categoria = categoria;
	}
	public int getCod() {
		return Cod;
	}
	public void setCod(int cod) {
		Cod = cod;
	}
	public String getDescricao() {
		return Descricao;
	}
	public void setDescricao(String descricao) {
		Descricao = descricao;
	}
	public String getPrioridade() {
		return Prioridade;
	}
	public void setPrioridade(String prioridade) {
		Prioridade = prioridade;
	}
	public String getStatus() {
		return Status;
	}
	public void setStatus(String status) {
		Status = status;
	}
	
	
}

E é como eu falei no banco de dados aparecem todos os dados inclusive a Data, mas na hora de retornar para a JSP da NullPointer

G
"    public String getDate_Abertura() {

String data_abertura = this.formatDateUser(Data_Abertura);;

return data_abertura; "

seu codigo…linha 2 = 2 ponto e virgula …

Criado 25 de abril de 2009
Ultima resposta 24 de mai. de 2010
Respostas 22
Participantes 3