@FacesConverter中未注入ManagedProperty

10

我试图以以下方式在我的FacesConverted中注入一个ManagedBean:

@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;
}

}

问题是groupService没有被注入,我得到了一个空指针异常。既然它也是一个ManagedBean,它不应该自动进行自动装配吗?当我将"getAsObject"更改为"return new Group();"时,一切都能正常工作。

有任何想法吗?

1个回答

27

很可能是您没有解析托管bean名称

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

例如,考虑这两个组件:
        <h:inputText converter="myConverter" value="#{foo.prop}" />
        <h:inputText converter="#{myConverter}" value="#{bar.prop}" />

当将转换器设置在第一个组件上时,它将由Application.createConverter创建。 转换器不是托管bean。如果你通过类型匹配转换器,则适用相同的规则。
在第二个组件中,使用值表达式返回实现Converter的类。这使用通常的托管bean机制。在这种情况下,@FacesConverter注释无关紧要。

谢谢,我不知道即使我将其注释为bean,转换器也不是bean。 - Mateusz Dymczyk
非常感谢,#{myConverter} 让我省了很多时间! - axelarge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接