2014-04-08 53 views
0

我想要添加自動完成,而使用 jQuery-Autocomplete 基礎(有一些小的變化) tutorial made by MykongjQuery的自動完成與分隔的值

我有春天應用程序,它列出了所有用戶

我的一個控制器攔截網址和驗證碼後:

@RequestMapping(value = "/getAccounts", method = RequestMethod.GET) 
public void listAccounts(@RequestParam String name, 
    HttpServletResponse response) { 
List<Account> all_accounts = accountRepo.findAll(); 
for (Account account : all_accounts) { 
    if (account.toString().contains(name)) { 
     try { 
      response.getWriter().write(account.toString() + ","); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    } 
} 

它返回頁面例如分隔值:

User Name1, User Name2, User Name3 ...

(我是被迫,因爲我已經長大應用程序,我收到了一些getOutputStream exceptions,但無論如何,生產只是分隔值..)

然後我嘗試添加在jsp中的數據自動完成建議:

$('#contact_person').autocomplete({ 
serviceUrl : '${pageContext.request.contextPath}/getAccounts', 
paramName : "name", 
delimiter : ",", 
transformResult : function(response) { 
    return{ 
    suggestions: $.map(response, function(item) { 
     return { 
      value : item, 
      data : item 
     }; 
    }) 
    }; 
} 
}); 

但這只是拋出一些JQuery的錯誤,如

「遺漏的類型錯誤:無法使用‘在’操作符來搜索'79 「在...

反正是有第一解析JSON的頁面結果,並以某種方式將其指定爲自動完成?

試圖生產出數組的結果,但不能然後將其添加爲建議

+0

上線人數是上述錯誤彈出? – dreamweiver

+0

@dreamweiver它導致jquery它自我錯誤:jquery-latest.js:997 in isArraylike(obj)function: return type ===「array」||鍵入== 「功能」 && \t \t(長度=== 0 || \t \t的typeof長度=== 「數量」 &&長度> 0 &&(長度 - 1)的物鏡);!'' – Khobar

+0

jQuery的最新.js'這是什麼樣的jQuery文件庫?自定義一個? – dreamweiver

回答

0

找到解決辦法了一下其他方式,以便想離開這裏,如果有人將有一些類似的問題

看來我是recieving

getOutputStream exceptions

因爲試圖添加帳戶實體類的屬性模型,它必須與其他實體一對多一些和多對一的關係。正如不需要自動完成這一關係,採用內部類,只有這樣,現在我可以分析它的js內JSON沒有任何問題,我(姓名,電子郵件) 必填字段。代碼本身是現在:

@RequestMapping(value = "/getAccounts", method = RequestMethod.GET) 
public @ResponseBody 
List<DisplayAccount> listAccounts(@RequestParam String name, 
     HttpServletResponse response) { 
    response.setContentType("application/json"); 
    List<Account> all_accountr = accountRepo.findAll(); 
    List<DisplayAccount> result = new ArrayList<DisplayAccount>(); 
    for (Account account : all_accountr) { 
     if (StringUtils.containsIgnoreCase(account.toString(), name)) { 
      DisplayAccount s_account = new DisplayAccount(account); 
      result.add(s_account); 
     } 
    } 
    return result; 
} 

和內部類:

class DisplayAccount { 
    private String name; 
    private String surname; 
    private String email; 
    private Long id; 

    public DisplayAccount(Account account) { 
     setId(account.getId()); 
     setName(account.getName()); 
     setSurname(account.getSurname()); 
     setEmail(account.getEmail()); 
    } 
    //...and some getters and setters