[RESOLVIDO] Como salvar um atributo LocalDate com o valor da data vindo de um form ?

Boa tarde pessoal, estou tendo problemas com o LocalDate do Java 8.

A situação é a seguinte, tenho uma classe .../model/Talhao onde esta, possui um atributo do tipo LocalDate que deve armazenar a data em que foi realizado um plantio neste talhão.

Essa informação será passada através de um formulário JSF + PrimeFaces, a dúvida esta exatamente em como salvar o valor inserido no formulário em meu atributo LocalDate data_plantio tentei utilizando <p:InputMask> para exigir o padrão dd/MM/yyyy mas ao submeter o formulário me deparo com o seguinte erro: java.lang.IllegalArgumentException: Cannot convert 08/08/2016 of type class java.lang.String to class java.time.LocalDate.

Alguém pode me ajudar com algum conversor do formulário para o atributo LocalDate.

Grato.

Amigo eu sempre uso assim, mas nunca usei com jsf

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate ld = LocalDate.parse("08/08/2016",formatter);
3 curtidas

@Xore2008

Obrigado pelo retorno amigo!

Consegui uma solução vou posta-la aqui caso alguém mais enfrente a mesma situação! A propósito usei o DateTimeFormatter como você sugeriu

Grato.

Como prometido ta ai a solução:

No formulario JSF, usei o atributo calendar do PrimeFaces:

<p:outputLabel value="Data Plantio: " for="dataPlantio"/> <p:calendar id="dataPlantio" value="#{talhaoController.talhao.data_plantio}" pattern="dd/MM/yyyy" mask="true" converter="localDateConverter" style="width: 100%;"/>

Sendo value o atributo do tipo LocalDate situado na Classe Talhao, pattern é a máscara que o campo vai ser preenchido, ou seja, dia/mes/ano, converter="localDateConverter" é o nome do corversor que eu tive que criar para converter do formato de retorno de <p:calendar>, que é do tipo String, para o formato aceito pelo LocalDate.

Código do conveter:

@FacesConverter(value="localDateConverter")
public class FacesConvertLocalDate implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        Locale BRAZIL = new Locale("pt", "BR");
        return LocalDate.parse(value, DateTimeFormatter.ofPattern("dd/MM/yyyy").withLocale(BRAZIL));
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        LocalDate dateValue = (LocalDate) value;

        return dateValue.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

    }
    
}

No banco de dados o formato é salvo no padrão yyyy-MM-dd. e a coluna na tabela do banco é do tipo Date, deve existir um outro converter para fazer as devidas conversões entre util.Date (usado no bacno) e time.LocalDate (usado na aplicação), mas isso acredito que seja trivial para quem tiver usando a nova a API do Java 8.