ManagedProperty не внедрен в @FacesConverter - PullRequest
10 голосов
/ 26 мая 2011

Я пытаюсь внедрить ManagedBean в FacesConverted следующим образом:

@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 Ответ

27 голосов
/ 26 мая 2011

Вероятно, вы не разрешаете имя управляемого компонента .

@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 . Преобразователь не является управляемым компонентом . Те же правила применяются, если вы сопоставляете конвертер по типу .

Во втором компоненте выражение значения используется для возврата класса, который реализует Converter . Это использует обычные управляемые механизмы bean. В этом случае аннотация @FacesConverter не имеет значения.

...