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 が注入されておらず、NullPointerEx が発生することです。これも ManagedBean であるため、自動的に自動配線されるべきではありませんか? 「getAsObject」を「return new Group();」に変更すると、すべて機能します。明らかに。

何か案は?

4

1 に答える 1

27

マネージド Bean 名を解決していない可能性があります。

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

たとえば、次の 2 つのコンポーネントについて考えてみましょう。

        <h:inputText converter="myConverter" value="#{foo.prop}" />
        <h:inputText converter="#{myConverter}" value="#{bar.prop}" />

コンバーターが最初のコンポーネントに設定されると、Application.createConverterによって作成されます。コンバーターはマネージド Bean ではありませんtype でコンバーターを照合する場合も、同じ規則が適用されます。

2 番目のコンポーネントでは、値式を使用して、Converterを実装するクラスを返します。これは、通常のマネージド Bean メカニズムを使用します。この場合、@FacesConverter注釈は無関係です。

于 2011-05-26T10:20:42.273 に答える