2009-05-24 25 views
5

RichFaces suggestionBox'u kullanırken, metin girişini suggestionBox destek kasetine, sayfadan birden fazla kimlik veya değerden nasıl geçirebilirsiniz. yani: seçilen bir eyalette önerilen şehirlerin bir listesini göstermek için? İşte benim autoComplete yöntemim.richfaces suggestionKutlama için ek değerleri geçen kutu

public List<Suburb> autocomplete(Object suggest) 
{ 
    String pref = (String) suggest; 
    ArrayList<Suburb> result = new ArrayList<Suburb>(); 

    Iterator<Suburb> iterator = getSuburbs().iterator(); 
    while(iterator.hasNext()) 
    { 
     Suburb elem = ((Suburb) iterator.next()); 
     if((elem.getName() != null && elem.getName().toLowerCase().indexOf(pref.toLowerCase()) == 0) || "".equals(pref)) 
     { 
      result.add(elem); 
     } 
    } 
    return result; 
} 

(Facelets m:textFormRow olarak) h:inputText metnidir sayfasında Object önermek, geçirilen bir değer yoktur Gördüğünüz gibi erken sayfasında

<m:textFormRow id="suburb" label="#{msgs.suburbPrompt}" 
    property="#{bean[dto].addressDTO.suburb}" 
    required="true" maxlength="100" size="30" /> 

<rich:suggestionbox height="200" width="200" usingSuggestObjects="true" 
    suggestionAction="#{suburbsMBean.autocomplete}" var="suburb" for="suburb" 
    fetchValue="#{suburb.name}" id="suggestion"> 
    <h:column> 
     <h:outputText value="#{suburb.name}" /> 
    </h:column> 
</rich:suggestionbox> 

seçebileceğiniz Öneri kutusunun görüntülediği banliyölerin listesini kaldırmak için kullanmak istediğim bir eyalet.

+0

Yapman çalışıyoruz ne daha açık olması gerekebilir - İstediğiniz kontrolleri ile basit bir formu gönderme, örneğin Kullanıcı giriş verileri olarak olayların sırasını kullanmak ve yazım yapmak. – McDowell

+0

Yani, eyaleti seçmek istiyorsun, o zaman öneri kutusu sadece bu eyaletten banliyöler önerecek miydi? Durumu seçmek için kod nasıl görünüyor? – Mark

cevap

0

Bu RichFaces suggestionBox demo ürününe henüz baktınız mı? Kaynağı görmek için örneklerin altında bağlantılar vardır.

Düzenleme: Eğer suggestionBox kullanıcı tipleri önce fasulye devletin değerini gerekiyor gibi

geliyor. Richcompes ajax desteğini, fasulye değerine geçmek için devletin değerini iletmek için kullanacağım, böylece otomatik tamamlama yöntemi çağrıldığında, kullanıcının banliyölerin listesini doldurmak için sayfada seçtiği duruma sahip olması gerekir.

+0

Kodu richfaces demosundan kullandım. – Martlark

1

<rich:suggestionbox'nun içinde <f:parameter etiketi kullanılıyor mu?

+0

bu bana doğru yönde işaret etse de, bu bir cevap değil. – PMorganCA

3

(Yasal Uyarı: ... soru önce oldukça uzun zaman istendi, ama belki bu benzer bir sorunu olan birine yardım edeceğiz farkındayım) benzer bir şey ile ilgilenen bu blog yazısı

Kontrol dışarı : RichFaces - SuggestionBox and hidden field.

Anahtar, <a4j:support event="onselect" ajaxSingle="true"> içine sarılmış <f:setPropertyActionListener value="#{...}" target="#{...}"> kullanmaktır. Bu, Öneri Kutusu için onselect tetiklendiğinde destekleyici için ek bir değer belirlemek için kullanılabilir. Bu yaklaşımla

Ben görüntüler (ve otomatik olarak tamamlandığı) müşterilerin isimleri bir SuggestionBox oluşturmak başardı ama seçime bağlı (birkaç özelliklere sahip; bir kimlik ile tanımlanır) bir bütün müşteri nesnesi ayarlayan bir fasülye.

+0

Olsa da yararlı bilgiler içerir Temelde aynı sorun hakkında başka bir cevap: http://stackoverflow.com/questions/1681559/richfaces-suggestionbox/1687031#1687031 – Jonik

0

rich:suggestionbox'un içindeki <f:parameter sekmesini kullanabilirsiniz. Görevim, bazen bu özelliğin göz ardı edilebileceği liste öğesinin bazı özelliklerine göre bir listeyi filtreliyordu. Bazen, sadece turunçgillerin bir listesini istiyorum ve bazen tüm meyve listesini istiyorum. sayfasında

:

<rich:suggestionbox usingSuggestObjects="true" 
     suggestionAction="#{listBuilder.autocompleteFilterFruit('')}" var="ind" 
     for="fruitInput" fetchValue="#{fruit.name}" id="suggestion" > 
    <f:param name="constrainInd" value="#{basket.isConstrainedToCitrus}" /> 

    ... 

</rich:suggestionbox> 

Bir liste özel filtreli olmak zorunda olmadığını biliyordu sınıf (Basket) ve liste inşa başka bir sınıf (ListBuilder) vardı.Basket yılında

: ListBuilder olarak

public Boolean getIsConstrainedToCitrus() 
{ 
    return new Boolean (logic that answers "is this basket for citrus only"); 
} 

:

public List<Fruit> autocompleteFilterFruit (Object arg) 
{ 
    List<Fruit> rtnList = new ArrayList<Fruit>(); 

    String suggestion = (String) arg; 

    // get the filter control that the page retrieved from the Basket 
    // 
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
    boolean isConstrainedToCitrus = "true".equals (params.get ("constrainInd")); 

    // allFruit is a pre-initialized list of all the available fruit. use it to populate the return list according 
    // to the filter rules and matches to the auto-complete suggestions 
    for (Fruit item : allFruit) 
    { 
     if ((!isConstrainedToCitrus || item.isCitrus()) && item.name.startsWith(suggestion)) 
     { 
      rtnList.add (item); 
     } 
    } 
    return rtnList; 
}