2017-04-12 6 views
1

p:autoComplete PF要素は、POJOを文字列にマップするためのConverterクラスを作成したPOJO提案リストを扱うことができます。getAsObject()メソッド内のPrimeFacesオートコンプリート要素のリストを反復する

<p:autoComplete value="#{bean.pojoTargetList}" completeMethod="#{bean.getPOJOFilteredList}" var="pojo" itemLabel="#{pojo.name}" 
itemValue="#{pojo}" converter="pojoConverter" /> 

事は、私はPOJO(getAsObject()法)に文字列からマップするために行う方法はない文字列(getAsString()法)にPOJOからマップするためにprocceedする方法を知っているがあります。

@FacesConverter("pojoConverter") 
public class POJOConverter implements Converter { 

@Override 
public Object getAsObject(FacesContext arg0, UIComponent uiComponent, String value) { 
    // ?   
    return pojo; 
} 

@Override 
public String getAsString(FacesContext arg0, UIComponent uiComponent, Object assetTag) { 
    String _return = null; 
    ... 
    return _return; 
} 

は、たぶん私は間違っているが、私の理解では、getAsObject()方法のuiComponent paramはp:autoComplete PF要素への参照であるということです。もしそうなら、私はPOJO提案リストにアクセスすることができます。したがって、それを反復して、value paramに一致するPOJOオブジェクトを見つけることができます。

getAsObject()メソッドからp:autocomplete要素のpojo suggesionリストにアクセスするにはどうすればいいのか本当にありがとうございます。

UPDATE: はたぶん私が間違っているが、私の理解がgetAsObject()方法のuiComponent paramはp:autoComplete PF要素への参照であるということです。もしそうなら、bean.getPOJOFilteredListにアクセスすることができます。したがって、私はbean.getPOJOFilteredListを繰り返し、value paramに一致するPOJOオブジェクトを見つけることができます。

+0

オムニファイズコンバータの1つだけを使用するのはなぜですか?彼らはこのすべてについて考えました。 –

答えて

0

はい、Converterは、返されると予想されるオブジェクトにアクセスする必要があります。実装は、このようになります。

@FacesConverter("userConverter") 
public class UserConverter implements Converter { 

    @Inject 
    UserDirectory userDirectory; 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String uid) { 
     return uid == null || uid.isEmpty() ? null : userDirectory.findByUid(uid); 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object user) { 
     final String uid = user instanceof User ? ((User) user).getUid() : null; 
     return StringUtils.defaultIfEmpty(uid, ""); 
    } 
} 

は、オートコンプリートの方法は、独立して、実装する必要があり、いくつかの部分的な入力に基づいて、特定のオブジェクトのリストを返す必要があり、大文字と小文字を区別しない、など:

public List<User> autoCompleteUser(String queryString) { 

    // implement custom retrieval/filter logic 

    return filteredUsers; 
} 
であります
+0

私が設定しているのは、 'getAsObject()'メソッド内の_UIComponent_パラメータから 'bean.getPOJOFilteredList'にアクセスすることです。あなたが提案するものは、注入されたプロパティを使ってそのようなリストにアクセスすることです。それは私が探しているものではありません。私の更新を見てください。 – txapeldot

+0

あなたの場合、具体的な 'UIComponent'は' org.primefaces.component.autocomplete.AutoComplete'型です。他のコンポーネントはすべてのオプションを含むモデルを内部的に参照しますが、 'autoComplete'は' completeMethod'を利用してそれらを動的に受け取ります。 'AutoComplete'があなたのbeanへの参照を保持しているのではないかと疑います。 –

関連する問題