Boa tarde!
Galera to usando o pickList do primeFaces e nao estou conseguindo criar um converter
para minhas entidades. Alguem ja passou por isso no primeFaeces?
Consegui essa classe aqui no guj mesmo, mas, ela ta lançando uma exceçao na linha comentada.
[code]
public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
if (value != null) {
return component.getAttributes().get(value);
}
return null;
}
public String getAsString(FacesContext ctx, UIComponent component, Object obj) {
if (obj != null && !"".equals(obj)) {
String id;
try {
id = this.getId(getClazz(ctx, component), obj);
if (id == null) {
id = “”;
}
id = id.trim();
component.getAttributes().put(id, getClazz(ctx, component).cast(obj)); // // aqui lança ClassCastException
return id;
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassCastException e) {
e.printStackTrace();
}
}
return null;
}
private Class<?> getClazz(FacesContext facesContext, UIComponent component) {
return component.getValueExpression(“value”).getType(facesContext.getELContext());
}
public String getId(Class<?> clazz, Object obj) throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
for (Field field : clazz.getDeclaredFields()) {
if ((field.getAnnotation(Id.class)) != null) {
Field privateField = clazz.getDeclaredField(field.getName());
privateField.setAccessible(true);
if (privateField.get(clazz.cast(obj)) != null) {
return (String) field.getType().cast(privateField.get(clazz.cast(obj))).toString();
} else {
return null;
}
}
}
return null;
}[/code]
se algume puder ajudar
Fala Sesshoumaru!
Eu estou usando ele normalmente.
da um olhada no meu Converter.
package com.gumo.converter;
import com.gumo.controller.util.JsfUtil;
import com.gumo.domain.AccessRule;
import com.gumo.facade.AccessRuleFacade;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.naming.NamingException;
/**
*
* @author leo
*/
@FacesConverter(value="accessRule", forClass = AccessRule.class)
public class AccessRuleConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.length() == 0) {
return null;
}
AccessRuleFacade facade = getFacade();
return facade.find(getKey(value));
}
java.lang.Long getKey(String value) {
java.lang.Long key;
key = Long.valueOf(value);
return key;
}
String getStringKey(java.lang.Long value) {
StringBuffer sb = new StringBuffer();
sb.append(value);
return sb.toString();
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof AccessRule) {
AccessRule o = (AccessRule) object;
return getStringKey(o.getId());
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName());
}
}
public AccessRuleFacade getFacade() {
try {
BeanManager bm = JsfUtil.getBeanManager();
Bean<AccessRuleFacade> bean = (Bean<AccessRuleFacade>) bm.getBeans(AccessRuleFacade.class).iterator().next();
CreationalContext<AccessRuleFacade> ctx = bm.createCreationalContext(bean);
return (AccessRuleFacade) bm.getReference(bean, AccessRuleFacade.class, ctx);
} catch (NamingException ex) {
return null;
}
}
}
Flw!