ManagedProperty未在@FacesConverter中注入

时间:2011-05-26 08:52:02

标签: jsf dependency-injection jsf-2 converter managed-bean

我正在尝试以下列方式在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,我得到了NullPointerEx。它不应该自动自动装配,因为它也是ManagedBean吗?当我将“getAsObject”更改为“return new Group();”时,这一切都有效。明显。

有什么想法吗?

1 个答案:

答案 0 :(得分:27)

您可能无法解析managed bean name

@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 。如果您match a converter by type,则适用相同的规则。

在第二个组件中,值表达式用于返回实现Converter的类。这使用通常的托管bean机制。在这种情况下,@FacesConverter注释无关紧要。