2017-04-12 11 views
1

p:autoComplete PF 요소는 POJO를 문자열로 그리고 그 반대로 매핑하기 위해 Converter 클래스를 생성 한 POJO 제안 목록을 처리합니다.getAsObject() 메소드 내의 PrimeFaces Autocomplete 요소의 제안 목록 반복

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

것은 내가 문자열 (getAsString() 방법)하지만 어떻게 할 수있는 POJO (getAsObject() 방법)에 문자열에서지도하는 방법에 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 매개 변수와 일치하는 POJO 개체를 찾을 수 있습니다.

+0

왜 Omnifaces 변환기 중 하나를 사용하지 않는 것이 좋습니까? 그들은이 모든 것에 대해 생각 해왔다. –

답변

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에 대한 참조를 보유하고 있는지 의심 스럽다. –