I\'ve used the Struts2 jQuery autocompleter
for my Struts 2 application.
Here is my code:
JSP:
Do this one
<s:url id="remoteurl" action="test"/>
<sj:select
id="customersjsonlstid"
name="echo"
label="Handle a List"
href="%{remoteurl}"
list="itemList"
listValue="name"
listKey="id"
autocomplete="true"
loadMinimumCount="2"
id="echo3"/>
Instead of this:
<sj:autocompleter href="%{remoteurl}" id="echo3" name="echo"
list="itemList" listKey="id" listValue="name" emptyOption="true"
headerKey="-1" headerValue="Please Select a Language" selectBox="true" />
And make sure you are returning the list from your action class. To check this, do it with your IDE debugger or System.out.print etc.
ex...
-------------
------------
itemList.add(new ListValue("Mysl", "Mysl") );
System.out.println("Size of my list="+itemList.size());
return SUCCESS;
}
And also you should define getter & setters in your action class
private List itemList;
public List getItemList() {
return itemList;
}
public void setItemList(List itemList) {
this.itemList = itemList;
}
You have typed wrong attribute that is not referenced.
<s:url id="remoteurl" action="test" />
should be
<s:url var="remoteurl" action="test" />
Use the list item bean class
public class ListValue {
private String id;
private String name;
...
}
public String populate() throws Exception {
itemList.add(new ListValue("Php", "Php"));
itemList.add(new ListValue("Java","Java") );
itemList.add(new ListValue("Mysl", "Mysl") );
return SUCCESS;
}
assumed that constructor and mutators have been added.
This is wrong:
<sj:autocompleter href="%{remoteurl}" id="lst" name="lst"
list="itemList" listValue="name" listKey="id" selectBox="true" />
You are feeding the autocompleter with a Map, not with an custom object built by yourself.
An HashMap does not have any name
nor id
fields, instead it have key
s and value
s fields.
Start by changing that and see if it works:
<sj:autocompleter href="%{remoteurl}" id="lst" name="lst"
list="itemList" listValue="value" listKey="key" selectBox="true" />