Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

VRaptor e JodaTime

Estou tendo dificuldade em formatar datas nos formulários e listagens. Como usar a JodaTime nesse caso ao acrescentar um atributo data ao model, de forma que seja exibido no patern "dd/MM/yyyy" no formulário ao editar o campo? Não estou conseguindo entender como integrar o plugin de forma simples aos models, controllers e no caso aos forms.

Por exemplo criei um o controle de servidor onde realizo o cadastro normalmente, listagem e edição, segue os códigos:

//ServidorDAO - método para editar o Servidor

public Servidor busca(int id) {
    String jpql = "select s from Servidor s where s.id = :id";
    TypedQuery<Servidor> query = manager.createQuery(jpql, Servidor.class);
    query.setParameter("id", id);
    results = query.getResultList();

    return results.isEmpty() ? null : results.get(0);
}

Na listagem temos:

<c:forEach items="${servidores}" var="servidor">
     ...
     <td><a href="${linkTo[ServidorController].edita}?id=${servidor.id}">Editar</a></td>

No ServidorController

// metodo edita
  public void edita(int id) {

    Servidor servidorEncontrado = servidorDAO.busca(id);
    if (servidorEncontrado == null) {
        result.notFound();
    } else {
        result.include(servidorEncontrado);
        result.of(this).cadastro();
    }
    }

No formulário, por exemplo eu carrego os campos com datas:

<label for="dataExercicio">Data de Exercício</label>
<input type="text" name="servidor.dataExercicio" id="dataExercicio" value="${servidor.dataExercicio.time}">

Neste caso esse campo apresenta o conteúdo Sat Mar 07 00:00:00 BRT 2015 ao invés da data 07/03/2015.

2 respostas
solução!

Oi Emiliano,

Para formatar a data vc usa a taglib fmt que faz parte do JSTL:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<fmt:formatDate value="${servidor.dataExercicio.time}" pattern="dd/MM/yyyy" />

No Alura tem um curso sobre JSTL, incluindo um capitulo sobre formatação:

https://cursos.alura.com.br/course/jstl

abs

Olá Nico,

Eu já tinha usado na listagem a taglib do JSTL

<fmt:formatDate value="${servidor.dataExercicio.time}" pattern="dd/MM/yyyy" />

Só que no formulário cadastro não estava funcionando. Não sei se depois de várias atualizações não deu refresh completo da tela.

Adicionei agora o trecho abaixo e funcionou perfeitamente.

<div class="field">
    <label for="dataExercicio">Data de Exercício</label>
    <fmt:formatDate var="datEx" value="${servidor.dataExercicio.time}"  pattern="dd/MM/yyyy" />
    <input type="text" value="${datEx}" /> 
</div>

Obrigado Nico, e parabéns as tuas aulas e o português esta perfeito! ;-)