autocompletestruts2struts2-jquery

Struts 2 jQuery Autocompleter with select box doesn't populate any values


I've used the Struts 2 jQuery autocompleter for my Struts 2 application.

Here is my code:

JSP:

 <s:form id="frm_demo" theme="simple" action="ManagersAutoCompleter1">
        <s:url var="remoteurl" action="test" />
    <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" />

        <s:submit value="submit" />
    </s:form>
      

struts.xml:

<action name="test" class="test.TestAction" method="populate">
  <result type="json">
  </result>
</action>

Action Class:

 public String populate() throws Exception {
        
        itemList = new ArrayList<ListValue>();
        itemList.add(new ListValue("Php", "Php"));
        itemList.add(new ListValue("Java", "Java"));
        itemList.add(new ListValue("Mysl", "Mysl"));
        return SUCCESS;
    } //getter setter for itemList

List Class:

public class ListValue {
    private String id;
    private String name;

    public ListValue(String id, String name) {
        this.id = id;
        this.name = name;
    } //getter setter methods

But, this Struts2 jQuery autocompleter is not working. It doesn't populate any values.


Solution

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