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

Não está setando o Pattern

Olá... conforme foto (http://prntscr.com/n60rc1) não está setando o Pattern. O código está igual ao da aula. Porém só funciona se eu mantenho as configurações no xhtml.

Segue código:

package br.com.casadocodigo.converters;

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.FacesConverter;

@FacesConverter(forClass=Calendar.class)
public class CalendarConverter implements Converter {

    private DateTimeConverter converter = new DateTimeConverter();

    public CalendarConverter() {
        converter.setPattern("dd/MM/yyyy");
        converter.setTimeZone(TimeZone.getTimeZone("America/Sao_Paulo"));
    }

    @Override
    public Object getAsObject(FacesContext context,
                UIComponent component, String dataTexto) {
        Date data = (Date) converter.getAsObject(context, component, dataTexto);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(data);
        return calendar;
    }

    @Override
    public String getAsString(FacesContext context,
                UIComponent component, Object dataObject) {
        if (dataObject == null)
            return null;

        Calendar calendar = (Calendar) dataObject;
        return converter.getAsString(context, component, calendar.getTime());
    }
}

xhtml do form:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">

<h:body>
    <div>
        <h:form>
            <div>
            <!-- Ex : Opção de validação por xhtml (tag inputText):
            requiredMessage="O Título é um campo obrigatório!!!" -->

                <h:outputLabel value="Título: " />
                <h:inputText value="#{adminLivrosBean.livro.titulo}" required="true" id="titulo"/>
                <h:message for="titulo"/>
            </div>
            <div>
                <h:outputLabel value="Descrição: " />
                <h:inputTextarea rows="4" cols="20" required="true"    value="#{adminLivrosBean.livro.descricao}" id="descricao" />
                <h:message for="descricao"/>
            </div>
            <div>
                <h:outputLabel value="Número de Páginas: " />
                <h:inputText value="#{adminLivrosBean.livro.numPaginas}"
                required="true" id="numPaginas" />
                <h:message for="numPaginas"/>
            </div>
            <div>
                <h:outputLabel value="Preço: " />
                <h:inputText value="#{adminLivrosBean.livro.preco}" 
                required="true" id="preco">
        <!--             <f:validateDoubleRange minimum="0.0" maximum="2000.0" /> validação por xhtml-->
                </h:inputText>
                <h:message for="preco"/>
            </div>

            <div>
                <h:outputLabel value="Autores: " />
                <h:selectManyListbox value="#{adminLivrosBean.autoresId}" converter="javax.faces.Integer">
                    <f:selectItems value="#{adminLivrosBean.autores}" var="autor"
                        itemValue="#{autor.id}" itemLabel="#{autor.nome}" id="autor"/>
                </h:selectManyListbox>
                <h:message for="autor"/>
            </div>
            <div>
                <h:outputLabel value="Data de Publicação" />
                <h:inputText value="#{adminLivrosBean.livro.dataPublicacao.time}" id="dataPublicacao" />
                <h:message for="dataPublicacao"/>
            </div>
            <h:commandButton value="Cadastrar" action="#{adminLivrosBean.salvar}" />
        </h:form>
    </div>

</h:body>
</html>
2 respostas
solução!

Oi Elison, tudo bem?

No seu xhtml quando você mostra a data, você está fazendo: <h:inputText value="#{adminLivrosBean.livro.dataPublicacao.time}" id="dataPublicacao" />

Quando você faz dataPublicacao.time você está pegando a dataPublicacao que é do tipo Calendar e pedindo um tipo Date através do método getTime.

Para o converter funcionar, você precisa passar o Calendar direto:

<h:inputText value="#{adminLivrosBean.livro.dataPublicacao}" id="dataPublicacao" />

Ficou mais claro?

Abraço!

Deu certo, Ficou bem mais claro sim.... obrigado :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software