스프링 JSON view와 jQuery 이용하여 자동완성 기능 만들기 3
조금 더 개선해서, 화면에서 검색 조건을 한 글자 한 글자 입력하면, 해당 글자를 가지고 있는 모든 것들을 검색해 올지.. 아니면, 해당 글자로 시작하는 것들을 가져올지 설정할 수 있는 기능을 서버쪽과 연결 했습니다.
$("#name").autocomplete("/ajax/user/names.do", {
minChars: 1,
width: 200,
max: 100,
model: "users",
delay:10,
selectFirst: true,
formatItem: function(row, i, total) {
return row[1] + " " + row[2];
},
formatResult: function(row){
return row[1];
}
});
화면에서는 selectFirst의 값만 바꾸면 되지만, 저 값이 서버에서 검색을 할 때도 영향을 줘야 하기 때문에, 저 값을 서버로 보내도록 jquery autocomplete js를 수정했습니다. jqeury ajax의 getJSON 함수에 서버로 보낼 parameter 목록을 보낼 수 있기 때문에 이건 뭐 아주 간단하게 수정할 수 있었습니다.
그런 다음 컨트롤러에서 이 값을 받아서 Serivce -> Dao 로 쭉쭉쭉 보내면 되는데..
public ModelAndView userNames(ModelMap map, String keyword, Boolean selectFirst)
이런 시그너처 만으로도 바인딩이 된다는 건 스프링 MVC 유저라면 당연히 아시리라 생각합니다. 문제는 저게 계속 길어질 우려가 있다는 거죠. 그래서 AjaxParams라는 클래스를 만들고 자바빈 스펙에 맞게 게터, 세터를 추가해준 다음 컨트롤러의 메서드 시그너처를 다음과 같이 바꿨습니다.
public ModelAndView userNames(ModelMap map, AjaxParams ajaxParams)
짜잔... 이렇게 해도 스프링 MVC는 똑똑해서 자동으로 바인딩 해줍니다. 그럼 이제 service랑 dao에는 ajaxParam을 넘겨주고 저기서 값을 꺼내서 검색해오면 되겠습니다.
이정도면.. 이제 대충 쓸만하게는 만든 것 같습니다.
혹시 모르죠. 뭔가 또 빠져서 다시 손을 대야할지도..