Pessoal alguem trabalha com o http://www.displaytag.org/example-decorator.jsp como faço para formtar data usando ele ?
Olá tenta algo do tipo
<display:column property="seuCampoTipoData" format="{0,date,dd/MM/yyyy}" />
Estava com um problema parecido com o do tucho. No meu caso mesmo colocando o comando:
<jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDAO"/>
<display:table name="${dao.lista}" class="its">
<display:column property="nome"/>
<display:column property="email"/>
<display:column property="endereco" />
<display:column property="dataNascimento" format="{0,date,dd-MM-yyyy}" sortable="true"/>
</display:table>
A saída da data no HMTL vem desse jeito:
java.util.GregorianCalendar[time=1331780400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Sao_Paulo",offset=-10800000,dstSavings=3600000,useDaylight=true,transitions=129,lastRule=java.util.SimpleTimeZone[id=America/Sao_Paulo,offset=-10800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=15,startDayOfWeek=1,startTime=0,startTimeMode=0,endMode=3,endMonth=1,endDay=15,endDayOfWeek=1,endTime=0,endTimeMode=0]],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=2,WEEK_OF_YEAR=12,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=75,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=-10800000,DST_OFFSET=0]
Minhas diretivas estão assim:
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Alguém sabe se devo adicionar alguma outra diretiva para funcionar?
Minha formatação da data melhorou um pouco, mas ainda não consegui no formato ‘dd/MM/yyyy’.
Eis o meu Bean Contato, com o atributo DataNascimento que é do tipo Calendar …
public class Contato {
private Long id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;
// Getters e Setters
}
Alterei o meu JSP desde o post anterior:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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>Exemplo com Display-Tag</title>
<link type="text/css" href="css/style.css" rel="stylesheet" />
</head>
<body>
<c:import url="cabecalho.jsp"/>
<!-- cria o DAO -->
<jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDAO"/>
<display:table name="${dao.lista}" class="its" decorator="br.com.caelum.agenda.util.DateNumberFormatDecorator">
<display:column property="nome"/>
<display:column property="email"/>
<display:column title="Endereço" property="endereco" />
<display:column title="Nascimento" property="dataNascimento.time" />
</display:table>
<br>
<c:import url="rodape.jsp"/>
</body>
</html>
Também criei o decorator para formatar o campo data…
public class DateNumberFormatDecorator extends TableDecorator {
/*
* Retorna a data como uma String no formato dd/MM/yyyy
*
* @retorna String
*/
public String getDate() {
System.out.println(new SimpleDateFormat("dd/MM/yyyy")
.format(((Contato) this.getCurrentRowObject())
.getDataNascimento().getTime()));
return new SimpleDateFormat("dd/MM/yyyy").format(((Contato) this
.getCurrentRowObject()).getDataNascimento().getTime());
}
}
Obs.: A classe de ContatoDAO já está criada com o método lista conforme abaixo:
public List<Contato> getLista() {
try {
List<Contato> contatos = new ArrayList<Contato>();
PreparedStatement stmt = this.connection
.prepareStatement("select * from contatos");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Contato contato = new Contato();
// popula o objeto contato
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
// popula a data de nascimento do contato, fazendo a conversao
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
// adiciona o contato na lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
No final das contas o resultado da formatação do campo Data de Nascimento na tabela é esse:
Thu Mar 15 00:00:00 BRT 2012
Será que está faltando alguma coisa no meu Decorator?
Por que a data não fica no formato ‘dd/MM/yyyy’?
Será que o DisplayTag tem alguma limitação para formatar uma data de um Calendar?
Alguém tem alguma sugestão?
Tenta usar o format da column
<disp:column property="getDataNascimento.time" title="Data" format="{0, date, dd/MM/yyyy }" />
Tambem estava com esse problemas mas agora a data esta certinha.
olha como estava a coluna da data antes:
<display:column property="dataFinalizacao" title="Data de finalização" sortable = "true"/>
Depois eu fiz essa mudança
<display:column title="Data de Finalização" sortable = "true">
<fmt:formatDate value="${tarefa.dataFinalizacao.time}"pattern="dd/MM/yyyy" />
</display:column>
lembre-se de importar a seguinte taglib:
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
O codigo todo da tabela:
<display:table name="tarefa" id="tarefa" export="false" sort="list" pagesize="10">
<display:column property="id" title="ID" />
<display:column property="descricao" title="Descrição" sortable = "true"/>
<display:column title="Data de Finalização" sortable = "true">
<fmt:formatDate value="${tarefa.dataFinalizacao.time}"pattern="dd/MM/yyyy" />
</display:column>
<display:column title="Finalizado?" sortable="true" class="tarefa_${tarefa.id}">
<c:if test="${tarefa.finalizado eq false}">
<a href="#" onclick="finalizaAgora(${tarefa.id})"><img src="resources/images/negativo.PNG" /> </a>
</c:if>
<c:if test="${tarefa.finalizado eq true}">
<img src="resources/images/positivo.PNG" />
</c:if>
</display:column>
<display:column title="Editar" >
<form action="mostraTarefa" method="POST">
<input type="hidden" name="id" value="${tarefa.id}"/>
<input type="submit" value="Editar" />
</form>
</display:column>
<display:column title="Excluir" >
<form action=removeTarefa method="POST">
<input type="hidden" name="id" value="${tarefa.id}"/>
<input type="submit" value="Excluir" />
</form>
</display:column>
</display:table>