Issue with suggestion Box Capital example, autocomplete alwa
valatharv Oct 6, 2009 11:44 AMHi,
I am not able to catch why autocomplete() bean method is called twice in capitals sample. Please let me know what I am doing wrong...
-- When I input anything (e.g. w) in suggestionBox, CapitalsBean.autocomplete() function is called, which calls "getCapitals().iterator()" for the value passed say "w" : OK
-- Issue is :It calls CapitalsBean.autocomplete() which calls "getCapitals().iterator()" again on the same event with pref and suggest as null.
I tried providing the condition checking "pref" as well as "suggest" for not null before calling "getCapitals().iterator()"
Log:
CapitalsBean entered >>>>>>>>>>>
CapitalsBean entered >>>>>>>>>>>
CapitalsBean.autocomplete(), pref passed is >>>> w
CapitalsBean.autocomplete(), suggest passed is >>>> w
CapitalsBean.autocomplete(), value passed is NOT NULL getting Capitals >>>>
In CapitalsBean.getCapitals() result BEFORE return is : 50
CapitalsBean.autocomplete(), pref passed is >>>>
CapitalsBean.autocomplete(), suggest passed is >>>>
CapitalsBean.autocomplete(), value passed is NOT NULL getting Capitals >>>>
In CapitalsBean.getCapitals() result BEFORE return is : 50
CapitalsBean
@Name("capitalsBean")
public class CapitalsBean {
private ArrayList<Capital> capitals = new ArrayList<Capital>();
private ArrayList<String> capitalsNames = new ArrayList<String>();
private List<SelectItem> capitalsOptions = new ArrayList<SelectItem>();
private String capital = "";
private String currentNameFilterValue;
public List<Capital> autocomplete(Object suggest) {
String pref = (String)suggest;
ArrayList<Capital> result = new ArrayList<Capital>();
System.out.println("CapitalsBean.autocomplete(), pref passed is >>>> "+pref);
System.out.println("CapitalsBean.autocomplete(), suggest passed is >>>> "+suggest);
if(<checked all the conditions for "pref" and "suggest" for not null>){
System.out.println("CapitalsBean.autocomplete(), value passed is NOT NULL getting Capitals >>>> ");
Iterator<Capital> iterator = getCapitals().iterator();
while (iterator.hasNext()) {
Capital elem = ((Capital) iterator.next());
if ((elem.getName() != null && elem.getName().toLowerCase().indexOf(pref.toLowerCase()) == 0) || "".equals(pref))
{
result.add(elem);
}
}
}else{
System.out.println("CapitalsBean.autocomplete(), value is NULL DO NOT get Capitals >>>> ");
}
return result;
}
public CapitalsBean() {
System.out.println("CapitalsBean entered >>>>>>>>>>> ");
URL rulesUrl = getClass().getResource("capitals-rules.xml");
...
capitalsNames.clear();
for (Capital cap : capitals) {
capitalsNames.add(cap.getName());
}
capitalsOptions.clear();
for (Capital cap : capitals) {
capitalsOptions.add(new SelectItem(cap.getName(),cap.getState()));
}
}
public ArrayList<Capital> getCapitals() {
System.out.println("In CapitalsBean.getCapitals() result BEFORE return is : "+capitals.size());
return capitals;
}XHTML:
<h:inputText value="#{capitalsBean.capital}" id="text" />
<rich:suggestionbox id="suggestionBoxId" for="text" tokens=","
suggestionAction="#{capitalsBean.autocomplete}" var="result"
fetchValue="#{result.name}"
nothingLabel="No capitals found" columnClasses="center"
usingSuggestObjects="true"
minChars="1">
<h:column>
<h:outputText value="#{result.name}" />
</h:column>
</rich:suggestionbox>