fpmxPJ
Outubro 20, 2006, 7:02pm
#1
Quando eu usava SQL comum conseguia facilmente usar o selectItem para carregar um selectOneMenu, porém agora com hibernate eu tenho que pegar a entidade e não só o código da outra tabela, testei vários conversores que achei na net mas nenhum está dando certo. É possível fazer isso sem conversor? Ou alguém tem um conversor funcionando para mostrar como ficou o código?
Obrigado
Opa,
Pelo que eu entendi tem o BeanUtils com o método copyProperties para copiar valores de um objeto para outro.
:okok:
fpmxPJ
Outubro 22, 2006, 7:44pm
#3
Na verdade só preciso pegar o código o item selecionado no selectOneMenu, só que ele retorna o objeto e dá erro: Conversion Error setting value ‘1’ for ‘null Converter’.
fpmxPJ
Outubro 23, 2006, 12:46pm
#4
Tentei fazer assim:
método:
public ArrayList<SelectItem> getListarComboBox() {
ArrayList savedGrupos = new ArrayList<SelectItem>();
List<Grupo> grupos;
grupos = grupoDao.listar("grupo");
for (Grupo grupo: grupos) {
SelectItem item = new SelectItem();
item.setLabel(grupo.getGrupo());
item.setValue(grupo);
savedGrupos.add(item);
}
return savedGrupos;
}
jsp:
<h:selectOneMenu id="grupo" value="#{usuarioRequest.usuario.grupo}" converter="conversorComboBox">
<f:selectItems value="#{usuarioRequest.listarComboBox}"/>
</h:selectOneMenu>
Converter:
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Map idsToObjects = new HashMap();
if (value.equals(null)) {
return null;
}
Grupo grupo = (Grupo)idsToObjects.get(value);
if (grupo == null) {
Session session = HibernateSessionFactory.openSession();
GrupoDao grupoDao = new GrupoDao(session);
Grupo grupo = grupoDao.buscar(Integer.parseInt(value));
idsToObjects.put(value, grupo);
}
return grupo;
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
Grupo grupo = (Grupo) value;
return grupo.getId().toString();
}
Carrega normal os valores no combo, mas na hora de dar o submit apresenta o erro: Validation Error: Value is not valid
Opa,
Bom até o momento ainda não consegui colocar para o campo valor uma propriedade que não seja String, certamente eles devem corrigir isto nas próximas versões.
:okok:
fpmxPJ
Outubro 26, 2006, 9:33pm
#6
Consegui fazer funcionar usando um conversor assim:
public class GrupoConverter implements Converter {
public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String string) {
if (string == null) {
return null;
}
Integer id = new Integer(string);
Session session = HibernateSessionFactory.openSession();
GrupoDao grupoDao = new GrupoDao(session);
return grupoDao.buscar(id);
}
public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object object) {
if (object == null) {
return null;
}
if(object instanceof Grupo) {
Grupo o = (Grupo) object;
return "" + o.getId();
} else {
throw new IllegalArgumentException("object:" + object + " of type:" + object.getClass().getName() + "; expected type: Grupo");
}
}
}
A pergunta agora é, será possível criar um conversor genérico para usar por qualquer selectOneMenu?
Você fala para qualquer tipo de dados? Se for, não existe, sugiro ir criando conversores para os campos que ainda não existem.
:okok:
Olá Marcosouza!!!
Preciso popular um combo. Peguei um exemplo aqui no grupo:
[code]public class Typeinheritances {
private String description;
private Map typeinheritancesMap = new HashMap();
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Map getDescriptionMap() {
typeinheritancesMap.put("RJ", "RJ");
typeinheritancesMap.put("AC", "AC");
typeinheritancesMap.put("AL", "AL");
return typeinheritancesMap;
} [/code]
Só que preciso que os valores da combo sejam o resultado de uma query. Tenho a lista abaixo:
[code] public List getTypeInheritances() {
try{
HibernateUtil.beginTransaction();
Session session = HibernateUtil.currentSession();
org.hibernate.Query query = session.createQuery(
"select object(o) from Typeinheritance as o");
List list= query.list();
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
return list;
}catch(Exception e1){
addMessage("Erro em listar typeinheritances!");
return null;
}
}[/code]
[code]e a minha jsp:
<h:selectOneMenu id="typeinheritance_list"
value="#{InheritanceFacade.description_ti}">
<f:selectItems value="#{Typeinheritances.descriptionMap}" />
</h:selectOneMenu>[/code]
Se eu chamar diretamente a lista: ="#{TypeinheritanceFacade.Typeinheritances}" , tenho erro de cast. Podes me ajudar a resolver isso, mas se possivel com alguns detalhes, sou iniciante em java!!