问题描述
||
我试图在我的Faces中注入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,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机制。在这种情况下,“ 3”注释不相关。