ManagedProperty not injected in @FacesConverter



我正试图在我的FacesConvested中注入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();"时,一切都会起作用。

有什么想法吗?

很可能您没有解析托管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注释是不相关的。

相关内容

  • 没有找到相关文章

最新更新