Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ConversionService

Olá, estou fazendo um projeto que na view tem um formulário com option que devem buscar de um Enum. Fiz toda configuração conforme o curso até agora. Tudo funciona corretamente, hibernate e mapeamento ok. Classes models:

package br.com.leandro.dev.models;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Processo {


    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String processoNome;


    @Enumerated(EnumType.STRING)
    private NaturezaDoProcesso NaturezaProcesso;

    public String getProcessoNome() {
        return processoNome;
    }

    public void setProcessoNome(String processoNome) {
        this.processoNome = processoNome;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public NaturezaDoProcesso getNaturezaProcesso() {
        return NaturezaProcesso;
    }

    public void setNaturezaProcesso(NaturezaDoProcesso naturezaProcesso) {
        NaturezaProcesso = naturezaProcesso;
    }

    @Override
    public String toString() {
        return "Processo [id=" + id + ", processoNome=" + processoNome + ", NaturezaProcesso=" + NaturezaProcesso + "]";
    }




}

Enum:

package br.com.leandro.dev.models;

public enum NaturezaDoProcesso {

    CIVEL, ELEITORAL, MILITAR, PENAL, PREVIDENCIARIA, SOCIETARIO, TRABALHISTA, TRIBUTARIO;

}

Na view:

<%@ 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>Cadatro Processo</title>
</head>
<body>


<form action="/processosSpringProgramatico/processo" method="POST">

<h1>CADASTRO PROCESSOS:</h1>

<label>Nome</label>
<input type="text" name="processoNome">

<label>Natureza</label>  
                    <select>
                          <option value="CIVEL">Cível</option>
                          <option value="ELEITORAL">Eleitoral</option>
                          <option value="MILITAR">Militar</option>
                          <option value="PENAL">Penal</option>
                          <option value="PREVIDENCIARIA">Previdenciária</option>
                          <option value="SOCIETARIO">Societário</option>
                          <option value="TRABALHISTA">Trabalhista</option>
                          <option value="TRIBUTARIA">Tributária</option>
                    </select>

<button type="submit">Enviar</button>


</form>

</body>
</html>

------------ As classes de configuração:

package br.com.leandro.dev.conf;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import br.com.leandro.dev.daos.ProcessoDAO;

public class ServletSpring extends AbstractAnnotationConfigDispatcherServletInitializer{

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {

        return new Class[]{AppWebConfiguration.class, JPAConfiguration.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

}


package br.com.leandro.dev.conf;

import javax.jws.WebService;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import br.com.leandro.dev.controllers.ProcessoController;
import br.com.leandro.dev.daos.ProcessoDAO;

@EnableWebMvc
@WebService
@ComponentScan(basePackageClasses={ProcessoController.class, ProcessoDAO.class, MyConversionService.class})
public class AppWebConfiguration extends WebMvcConfigurerAdapter{

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");

        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}
package br.com.leandro.dev.conf;

import java.util.Properties;

import javax.persistence.EntityManagerFactory;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
public class JPAConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factoryBean = 
                new LocalContainerEntityManagerFactoryBean();
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        factoryBean.setJpaVendorAdapter(vendorAdapter);

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("");
        dataSource.setUrl("jdbc:mysql://localhost:3306/testeprocesso");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");

        factoryBean.setDataSource(dataSource);

        Properties props = new Properties();
        props.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "update");

        factoryBean.setJpaProperties(props);

        factoryBean.setPackagesToScan("br.com.leandro.dev.models");

        return factoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory emf){
        return new JpaTransactionManager(emf);
    }
}

Até aí tuddo bem... mas o enum, fica dando null no Banco de dados. Li e reli o livro de referência do Spring e no capítulo 9.5 Spring Type Conversion, ele diz que para centralizar uma logica de conversão para uma hierarquia de classes é necessário implemntar a ConverterFactory, e deu um exemplo de StringToEnum... q implmentei. Blz... Sei q é necessário configurar para o Spring gerenciar... Aí que travei. Sei que no curso Spring 4 o professor faz usando XML, mas quero fazer de forma programática, como está nesse curso... Novamente no livro de referência mostra como fazer, mas não consegui implementar. Ele diz para injetar a referencia na classe:

@Service
public class MyService {
@Autowired
public MyService(ConversionService conversionService) {
this.conversionService = conversionService;
}
public void doIt() {
this.conversionService.convert(...)
}
}

----A única coisa que quero é fazer funcionar esse Option!! hehehe.... Alguém pode me ajudar??

1 resposta
solução!

Fala aí Leandro blz?

Cara creio que não precise fazer o Converter para conseguir usar o ENUM.

Tente fazer o seguinte, na sua view dentro da tag <seletect> adicione o atributo name com o mesmo nome do seu atributo. ex:

<select name="NaturezaProcesso">

E veja se somente assim funciona.