Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

richfaces suggestionBox passing additional values to backing bean

When using the RichFaces suggestionBox how can you pass more than one id or value from the page with the text input to the suggestionBox backing bean. ie: to show a list of suggested cities within a selected state? Here is my autoComplete method.

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

As you can see there is one value passed from the page, Object suggest, which is the text of the h:inputText (in the 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>

Earlier in the page you can select a state which I'd like to use to pare down the list of suburbs that the suggestion box displays.

like image 274
Martlark Avatar asked Oct 14 '22 15:10

Martlark


2 Answers

(Disclaimer: I'm aware that the question was asked rather long time ago, but maybe this'll help someone with a similar problem...)

Check out this blog post which deals with something similar: RichFaces - SuggestionBox and hidden field

The key is to use <f:setPropertyActionListener value="#{...}" target="#{...}"> wrapped inside <a4j:support event="onselect" ajaxSingle="true">. This can be used to set an additional value for a backing bean when onselect is triggered for the SuggestionBox.

With this approach I managed to create a SuggestionBox that displays (and autocompletes) customers' names but upon selection sets a whole customer object (with several properties; identified by an id) for a bean.

like image 109
Jonik Avatar answered Oct 18 '22 13:10

Jonik


Does using <f:parameter tag inside the <rich:suggestionbox work?

like image 44
Jim Barrows Avatar answered Oct 18 '22 14:10

Jim Barrows