In Biz web apps, an end user often need to enter some code that he/she cannot memorize. For for example, a product code. And auto complete is very helpful and it is a commonly used in Ajax.
Summarized as two steps
- Javascript function is being called every time a key stroked on keyboard
- Ajax calls a controller class and the controller class returns a suggested list
1. Javascript function is being called every time a key stroked on keyboard
<form:input path="mdseCd" id="idItemCd" style="height:25px; width:200px" />
Step 1.1. Javascript (Ajax) will be called as user types a key
$('#idItemCd').autocomplete({ serviceUrl: '${pageContext.request.contextPath}/autoCompleteList', paramName: "inputVal", delimiter: ",", transformResult: function(response) { return { suggestions: $.map($.parseJSON(response), function(item) { return { value: item.mdseCd, data: item.id }; }) }; } });
Step 1.2. This Ajax send a request to the controller method:
2. Ajax calls a controller class and the controller class returns a suggested list
@RequestMapping(value = "/autoCompleteList", method = RequestMethod.GET) public @ResponseBody List<MdseModel> getTags(@RequestParam(value = "inputVal") String inputVal, HttpServletRequest req) { List<MdseModel> entireSessionList = (List<MdseModel>)req.getSession().getAttribute(CONST.MDSE_LIST.getVal()); List<MdseModel> resultList = new ArrayList<MdseModel>(); if (!CommonBL.isEmpty(entireSessionList)) { for (MdseModel obj : entireSessionList) { // Fuzzy search if (obj.getMdseCd().contains(inputVal)) { resultList.add(obj); } } } return resultList; }
Step 2.1. At line 3, getting a entireSessionList contains an entire list that has been created as the screen is initialized.
Step 2.2. At line 8 to 10, the method creating a list that starts from “5508”
Step 2.3. At line 13, the method returns the list as JSON object.