Jquery自动完成,带有分隔值

时间:2014-04-08 13:52:27

标签: javascript jquery spring spring-mvc autocomplete

我正在尝试在使用时添加自动完成功能 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的页面结果并以某种方式将其分配给自动完成?

尝试从结果中生成数组,但不能将其添加为建议

1 个答案:

答案 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