2011-05-26 11 views
9

Estoy tratando de inyectar un ManagedBean en mi FacesConverted la siguiente manera:ManagedProperty no inyecta en @FacesConverter

@ManagedBean 
@RequestScoped 
@FacesConverter(forClass = Group.class) 
public class GroupConverter implements Converter { 

@ManagedProperty("#{groupService}") 
private GroupService groupService; 

@Override 
public Group getAsObject(FacesContext context, UIComponent arg1, 
     String groupName) { 
    return groupService.findGroupByName(groupName); 
} 

@Override 
public String getAsString(FacesContext arg0, UIComponent arg1, Object group) { 
    return ((Group) group).getName(); 
} 

public GroupService getGroupService() { 
    return groupService; 
} 

public void setGroupService(GroupService groupService) { 
    this.groupService = groupService; 
} 

} 

El problema es que groupService no se está inyectando y me da un NullPointerEx. ¿No debería autoconectarse automáticamente ya que también es ManagedBean? Todo funciona cuando cambio "getAsObject" a "return new Group();" obviamente.

¿Alguna idea?

Respuesta

24

Es probable que no esté resolviendo el managed bean name.

@ManagedBean(name = "myConverter") 
@RequestScoped 
@FacesConverter(value = "myConverter") 
public class MyConverter implements Converter { 

Por ejemplo, considere estos dos componentes:

 <h:inputText converter="myConverter" value="#{foo.prop}" /> 
     <h:inputText converter="#{myConverter}" value="#{bar.prop}" /> 

Cuando el convertidor se encuentra en el primer componente, que será creado por Application.createConverter. Un convertidor no es un bean administrado. Las mismas reglas se aplican si match a converter by type.

En el segundo componente, se utiliza una expresión de valor para devolver una clase que implementa Converter. Esto usa los mecanismos de frijoles administrados usuales. En este caso, la anotación @FacesConverter es irrelevante.

+0

Gracias, no tenía idea de que un convertidor no es un frijol, incluso si lo anoto como uno. –

+0

Gracias, eso hizo mi día. – flash

+0

¡Muchas gracias, el '# {myConverter}' me ha ahorrado mucho tiempo! – axelarge

Cuestiones relacionadas