Ola estou tendo problemas com conversores, tenho 3 converters e apenas um deles funciona,segue as classes simplificadas abaixo.
User.java
public class User {
private District district;
private List<Skill> skills=new ArrayList<Skill>();
}
Skill.ajva
public class Skill{
private Long id;
private SkillType skillType;
private Double experienceTime;
}
SkillType.java
public class SkillType{
private Long id;
private String name;
}
District.java
public class District {
private Long id;
private String name;
}
tenho esses 3 converters
package br.com.codnamemusic.converters;
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.domain.Skill;
@Convert(Skill.class)
@RequestScoped
public class SkillConverter implements Converter<Skill>{
@Override
public Skill convert(String value, Class<? extends Skill> type,
ResourceBundle bundle) {
if (value == null || value.equals("")) {
System.out.println("Skill converter null");
return null;
}
try {
System.out.println("convert skill");
Long id=Long.parseLong(value);
return new Skill(id);
} catch (Exception e) {
throw new ConversionError(MessageFormat.format("Erro ao converter Distrito", value));
}
}
}
package br.com.codnamemusic.converters;
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.domain.SkillType;
import br.com.codnamemusic.persistence.SkillTypeDao;
@Convert(SkillType.class)
@RequestScoped
public class SkillTypeConverter implements Converter<SkillType>{
private SkillTypeDao skillTypeDao;
public SkillTypeConverter(SkillTypeDao skillTypeDao) {
this.skillTypeDao=skillTypeDao;
}
@Override
public SkillType convert(String value, Class<? extends SkillType> type,
ResourceBundle bundle) {
if (value == null || value.equals("")) {
System.out.println("Skill converter null");
return null;
}
try {
System.out.println("convert SkillType");
Long id=Long.parseLong(value);
return skillTypeDao.findById(id);
} catch (Exception e) {
throw new ConversionError(MessageFormat.format("Erro ao converter SkillType", value));
}
}
}
package br.com.codnamemusic.converters;
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.domain.District;
import br.com.codnamemusic.persistence.DistrictDao;
@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("")) {
System.out.println("district converter nulo");
return null;
}
try {
System.out.println("district");
Long id=Long.parseLong(value);
return districtDao.findById(id);
} catch (Exception e) {
throw new ConversionError(MessageFormat.format("Erro ao converter Distrito", value));
}
}
}
Estou invocando da seguinte forma
<label for="district">Selecione o bairro: </label>
<select id="district" name="user.district" disabled="disabled">
</select>
<label for="skills">Selecione uma habilidade: </label>
<select id="skills" name="user.skills[0].skillType.id">
#foreach($item in $skills)
<option value="$item.id">$item.name</option>
#end
</select>
<label for="user.skills[0].skillLevel">
Como voce se avalia nessa habilidade?<br>
<input type="radio" name="user.skills[0].skillLevel" value="BEGINNER"> <span>Iniciante</span> <input type="radio" name="user.skills[0].skillLevel" value="BASIC"> <span>Basico</span> <input type="radio" name="user.skills[0].skillLevel" value="ADVANCED"> <span>Avançado</span> <input type="radio" name="user.skills[0].skillLevel" value="PROFESSIONAL"> <span>Profissional</span>
</label>
No final ele cria um objeto user porém so passa pelo DistrictConverter…ele nao passa pelo SkillTypeConverter e nen pelo SkillConverter e cria objetos java normais, não entendi isso por que criei os 3 converters da mesma forma por que apenas 1 deles funciona?
se alguém puder ajudar agradeço.