I had spending 2 days to figure out how’s it work, and finally i’m able to write some sample code.
The example was using flexjson 1.9.1 and spring portlet as platform.
Source code
Note * Don’t mess up the jquery autocomplete with jquery ui autocomple plugin.
JSON Data
-
{"members":
-
[{"name":"Alex","id":1},
-
{"name":"Agnes","id":2},
-
{"name":"Alan","id":3},
-
{"name":"John","id":4},
-
{"name":"Jason","id":5},
-
{"name":"Maria","id":6}]}
Base on the json data show on above, we analyze it has 2 POJO.
1) A plain object contain a list of member object
-
public static class MembersData {
-
private List<Member> members;
-
-
@JSON
-
public List<Member> getMembers() {
-
return members;
-
}
-
-
public void setMembers(List<Member> members) {
-
this.members = members;
-
}
-
}
2) A member object contains 2 fields name and id.
@ResourceMapping
In our controller, we need to have a @resourcemapping method to handler the resource request.
Next, we will get value by calling the parameter “term”.
-
@ResourceMapping
-
public void doAjax(ResourceRequest request,
-
{
-
response.setContentType("json");
-
response.setCharacterEncoding("utf-8");
-
out.print(getRefreshData(term));
-
}
-
-
JSONSerializer serializer = new JSONSerializer();
-
-
MembersData list = new MembersData();
-
-
Member member;
-
for(int i=0; i < resultset.size() ; i++){
-
member.setName(resultset.get(i));
-
members.add(member);
-
}
-
list.setMembers(members);
-
return serializer.serialize(list);
-
}
Dummy database
-
public class MemberDB {
-
private int total;
-
private String data =
-
"Alex,Agnes,Alan,Bjok,Bill,John,Jason,Maria,Man";
-
-
private List members;
-
-
public MemberDB() {
-
-
while(st.hasMoreTokens()) {
-
members.add(st.nextToken().trim());
-
}
-
total = members.size();
-
}
-
-
String member = null;
-
query = query.toLowerCase();
-
for(int i=0; i < total; i++) {
-
member = members.get(i).toLowerCase();
-
if(member.startsWith(query)) {
-
matched.add(members.get(i));
-
}
-
}
-
return matched;
-
}
-
}
JSP & JQuery
First, download and import the jquery ui plugin and css into project folder, and refer the demo from jquery ui site
-
<script src="${pageContext.request.contextPath}/js/jquery-1.4.2.min.js" type="text/javascript"></script>
-
-
<script src="${pageContext.request.contextPath}/js/jquery-ui-1.8.5.custom.min.js" type="text/javascript"></script>
-
-
<script src="${pageContext.request.contextPath}/js/jquery.ui.autocomplete.js" type="text/javascript"></script>
-
-
<link href="${pageContext.request.contextPath}/css/jquery-ui.css"
-
rel="stylesheet" type="text/css" />
-
In your jsp, write some simple html like below :
-
-
<label>
-
<span> Member : </span>
-
<input type="text" id="member" name="member" />
-
</label>
-
Write jquery on the botton :
-
-
<portlet:resourceURL var="jsonUrl" />
-
<script type="text/javascript">
-
-
jQuery(document).ready(function() {
-
jQuery("#member").autocomplete({
-
source: function(request, response) {
-
jQuery.ajax({
-
url : ‘${jsonUrl}’,
-
dataType : ‘json’,
-
data : {
-
term : request.term
-
},
-
success : function(data) {
-
response(jQuery.map(data.members, function(item) {
-
return {
-
label: item.name,
-
value: item.name
-
}
-
}))
-
}
-
})
-
},
-
minLength : 2,
-
open: function() {
-
jQuery(this).removeClass("ui-corner-all").addClass("ui-corner-top");
-
},
-
-
close: function() {
-
jQuery(this).removeClass("ui-corner-top").addClass("ui-corner-all");
-
}
-
});
-
});
-
</script>
-

Posted in 



Hi,
Can you please provide a source code for this example?
I really stuck with the @ResourceMapping, I am trying to return plain text as a response, But i can not get any response on a success callback function of jquery ajax.Instead of it, I got error “Syntax Error” on firfox browser’s error console.
Please help on this.
If you can provide the source code of this example then it would be really helpful for me.
Hi, source code was added.
Hi what if I have JSON data nested? such as this :
{“list”: [
{
"id": 10,
"Name": "Spiderman",
"Status": "Untouchable",
"dept": {
"deptId" : 2,
"deptName": "SuperHuman",
"manager" : "The Avanger"
}
}, .... ...
]}
I want to display (name,deptName). Whats your suggestion?
Rgds,
Hi,
Can you explain return response
[code]
success : function(data) {
response(jQuery.map(data.members, function(item) {
return {
label: item.id, // ----> I made changes
value: item.name
}
}))
}
[/code]
what if i want to display member ID to another input text based on selection on name in autocomplete?
I try include as below :
[code]
select: function( event, ui ) {
var x=$('#memberID').val(ui.item.label);
}
[/code]
but unfortunately it said ui.item.label is undefined. any trick here?
Hi, i’m not good in explain. But you may refer to my new post http://loongest.com/spring-mvc/jquery-ui-autocomplete-and-spring-mvc-explain/ i hope that may help you to understand.
rendi, if your purpose is only for “display” like joining name + department. the most simple way to do this is pre-process the display information from your controller before you pass back to the jquery. Otherwise, you may need extra process to extract the json data into piece by piece before the return statement.
change succes function as
success : function(data) { response(jQuery.map(data.members, function(item) { return { label: item.name, value: item.name id : item.id } })) } add this select : function(event, ui) { $("#hiddenfield").val(ui.item.id); },