2009-05-24 19 views
5

Quando si utilizza il RichFaces suggestionBox come è possibile passare più di un ID o un valore dalla pagina con l'input di testo al bean backing suggestionBox. es: per mostrare una lista di città suggerite all'interno di uno stato selezionato? Ecco il mio metodo autoComplete.richfaces suggerimentoBox passaggio di valori aggiuntivi al bean di supporto

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; 
} 

Come potete vedere c'è un valore passato dalla pagina, Object suggeriscono, che è il testo del h:inputText (nelle facelets m:textFormRow)

<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> 

All'inizio della pagina è possibile selezionare uno stato che mi piacerebbe usare per abbattere l'elenco dei sobborghi che mostra la finestra dei suggerimenti.

+0

Potrebbe essere necessario essere più esplicito su ciò che si sta cercando di fare - per esempio, la pubblicazione di un semplice modulo con i controlli che si desidera utilizzare e compitare la sequenza di eventi mentre l'utente immette i dati. – McDowell

+0

Quindi, per selezionare lo stato, la casella di suggerimento suggerirebbe solo i sobborghi da quello stato? Che aspetto ha il codice per selezionare lo stato? – Mark

risposta

0

Hai già guardato questo suggerimento RichFacesBox demo? Ci sono collegamenti sotto gli esempi per visualizzare la fonte.

Edit:

Suona come è necessario il valore di stato nel vostro fagioli prima che l'utente digita nel suggestionBox. Vorrei usare il supporto ajax di RichFaces per passare il valore di stato al bean, così quando viene chiamato il metodo di completamento automatico ha lo stato selezionato dall'utente nella pagina per popolare un elenco di periferie.

+0

Ho usato il codice dalla demo di Richfaces. – Martlark

1

L'utilizzo del tag <f:parameter all'interno dello <rich:suggestionbox funziona?

+0

sebbene questo mi abbia indirizzato nella giusta direzione, non è una risposta. Contiene informazioni utili, anche se – PMorganCA

3

(Disclaimer: io sono consapevole del fatto che la questione è stato chiesto, piuttosto molto tempo fa, ma forse questo ti aiuto qualcuno con un problema simile ...)

Dai un'occhiata a questo post sul blog che si occupa di qualcosa di simile : RichFaces - SuggestionBox and hidden field.

Il codice utilizza <f:setPropertyActionListener value="#{...}" target="#{...}"> all'interno di <a4j:support event="onselect" ajaxSingle="true">. Questo può essere usato per impostare un valore addizionale per un bean di supporto quando onselect viene attivato per SuggestionBox.

Con questo approccio sono riuscito a creare un SuggestionBox che visualizza (e) autocompletes nomi dei clienti, quando selezione fissa un intero oggetto cliente (con diverse proprietà; identificato da un ID) per un bean.

+0

Ecco un'altra risposta SO sostanzialmente sullo stesso problema: http://stackoverflow.com/questions/1681559/richfaces-suggestionbox/1687031#1687031 – Jonik

0

È possibile utilizzare la scheda <f:parameter all'interno di rich:suggestionbox. Il mio compito stava filtrando una lista in base ad alcuni attributi dell'elemento list, dove a volte quell'attributo poteva essere ignorato. Ad esempio, a volte voglio una lista di soli agrumi, ea volte voglio l'intera lista di frutta disponibile.

Nella pagina:

<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> 

ho avuto una classe (Basket) che sapeva se la lista doveva essere speciale-filtrata, e un'altra classe (ListBuilder) che ha costruito la lista.

In Basket:

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

In ListBuilder:

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; 
} 
Problemi correlati