Conversor Vraptor

5 respostas
Diabo_Loiro

Ola estou tentando fazer um conversor estou tendo uma pequena dificuldade, ele simplesmente não funciona.

Se alguém puder ajudar?

segue codigo simplificado

Classe que quero receber no controller

class User{
@ManyToOne(cascade = CascadeType.ALL)
	private District district;
}

Conversor

package br.com.codnamemusic.util;

import java.text.MessageFormat;
import java.util.ResourceBundle;

import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;
import br.com.caelum.vraptor.converter.ConversionError;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.codnamemusic.persistence.DistrictDao;
import br.com.domain.District;

@Convert(District.class)
@RequestScoped
public class DistrictConverter implements Converter<District>{
	
	private DistrictDao districtDao;


	public DistrictConverter(DistrictDao districtDao) {
	this.districtDao=districtDao;
	}
	

		@Override
		public District convert(String value, Class<? extends District> type,
				ResourceBundle bundle) {
			if (value == null || value.equals("")) {
	            return null;
	        }
	        try {
	        	Long id=Long.parseLong(value);
	            return districtDao.findById(id);
	        } catch (Exception e) {
	                    throw new ConversionError(MessageFormat.format("Erro ao converter Distrito", value));
	        }
		}



}

Como to chamando no html

<div id="district">    
    <label>Selecione o bairro: </label>
    <select id="user.district">
    #foreach($item in $districtList)
    <option value="$item.id">$item.nome</option>
    #end
    </select>
    </div>

5 Respostas

Lucas_Cavalcanti

ao invés de select id=“user.district” use select name=“user.district”

carlosjrcabello

Buenas senhor,

Você pode simplesmente apontar o NAME do seu elemento SELECT para o ID do objeto District…

<select id="user.district.id">
    <for:each....>
        <option value="${d.id}">${d.nome}</option>
    </foreach>
</select>

Aí é só validar no seu controller caso o usuário não tenha informado nada ou então alterado o ID para fazer alguma picaretagem.

Não vejo necessidade neste Interceptor.

Diabo_Loiro

vlw Lucas, rolou por aqui.

carlosjrcabello não entendi o que quis dizer se puder explicar melhor, de qualquer forma o converter retorna uma entidade gerenciada…

vlw

carlosjrcabello

Diabo Loiro:
vlw Lucas, rolou por aqui.

carlosjrcabello não entendi o que quis dizer se puder explicar melhor, de qualquer forma o converter retorna uma entidade gerenciada…

vlw

Então, será que realmente precisa deixá-las como gerenciadas ? Isso não vai te dar uma carga muito grande em consultas ?

…eu geralmente uso apenas o ID como referência e não uso os cascades do framework ORM…deixo como gerenciada apenas nos momentos que realmente preciso.

Diabo_Loiro

É que no caso se não for gerenciada,na hora de salvar ele cria uma nova, no meu caso uso o cascade.

Criado 21 de novembro de 2012
Ultima resposta 21 de nov. de 2012
Respostas 5
Participantes 3