Struts2 jQuery Autocompleter с полем выбора
Я использовал Struts2 jQuery autocompleter
для моего приложения Struts 2.
Вот мой код:
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>
Класс действий:
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
Список класса:
public class ListValue {
private String id;
private String name;
public ListValue(String id, String name) {
this.id = id;
this.name = name;
} //getter setter methods
Но это Struts2 jQuery autocompleter
не работает. Он не заполняет никаких значений.
3 ответа
Сделай это
<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"/>
Вместо этого:
<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" />
И убедитесь, что вы возвращаете список из вашего класса действий. Чтобы проверить это, сделайте это с помощью вашего IDE-отладчика или System.out.print и т. Д.
ex...
-------------
------------
itemList.add(new ListValue("Mysl", "Mysl") );
System.out.println("Size of my list="+itemList.size());
return SUCCESS;
}
А также вы должны определить getter & setters в вашем классе действий
private List itemList;
public List getItemList() {
return itemList;
}
public void setItemList(List itemList) {
this.itemList = itemList;
}
Это не верно:
<sj:autocompleter href="%{remoteurl}" id="lst" name="lst"
list="itemList" listValue="name" listKey="id" selectBox="true" />
Вы заполняете автозаполнение картой, а не пользовательским объектом, созданным вами.
HashMap не имеет каких-либо name
ни id
поля, вместо этого есть key
с и value
поля
Начните с изменения этого и посмотрите, работает ли он:
<sj:autocompleter href="%{remoteurl}" id="lst" name="lst"
list="itemList" listValue="value" listKey="key" selectBox="true" />
Вы ввели неверный атрибут, на который нет ссылки.
<s:url id="remoteurl" action="test" />
должно быть
<s:url var="remoteurl" action="test" />
Используйте класс bean элемента списка
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;
}
Предполагается, что конструктор и мутаторы были добавлены.