Struts2 jQuery Autocompleter with select box

邮差的信 提交于 2019-12-21 02:55:08

问题


I've used the Struts2 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.


回答1:


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



回答2:


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 keys and values 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" />



回答3:


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.



来源:https://stackoverflow.com/questions/14153943/struts2-jquery-autocompleter-with-select-box

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!