Problema com Data + JSP

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

[code]public ListgetLista()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;

}[/code]

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

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

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; }

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

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

[code]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;
}

}
[/code]

Posta ai teu JSP?


<%@ 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>


Estou usando Struts tambem

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.

É caiomacedor, esta apresentanto um erro .

Ele fala que existe uma Thread na classe no bean Chamado

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

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)

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

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

[code]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()+"<<<<<<");
		
	}
}[/code]

No meu Mysql aparece a Date/Time normal

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

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");
	}
}[/code]

Meu Form:
[code]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:

[code]
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;
}

}[/code]

NO JSP:

<c:forEach var="user" items="${collection}" varStatus="id"> <tr> <td>${user.dtCriacao}</td> </tr> </c:forEach>

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}

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

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

è 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.

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.