我正在尝试在使用时添加自动完成功能 jQuery-Autocomplete 基础(有一些小的变化) tutorial made by Mykong
我有一个列出所有用户的春季应用程序
我的一个控制器拦截url并在此代码之后:
@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();
}
}
}
}
它返回带有分隔值的页面,例如:
用户名1,用户名2,用户名3 ...
(我被迫只生成分隔值,因为在我已经增长的应用程序中,我收到了一些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错误“未捕获的TypeError:无法使用'in'运算符在...中搜索'79'
无论如何首先解析json的页面结果并以某种方式将其分配给自动完成?
尝试从结果中生成数组,但不能将其添加为建议
答案 0 :(得分:0)
在其他方面找到解决方案,所以如果有人会有类似的问题,请留在这里
看来我正在接受
getOutputStream例外
因为尝试将Account实体类作为属性添加到与其他实体具有一些OneToMany和ManyToOne关系的模型。因为自动完成不需要这种关系,所以使用的内部类只有我需要的字段(姓名,电子邮件) 所以现在我可以毫不费力地将它解析为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