【问题标题】:jQuery-ui-autocomplete from text source来自文本源的 jQuery-ui-autocomplete
【发布时间】:2011-04-27 07:54:39
【问题描述】:

我尝试使用 autocomplete jquery-ui 脚本,但从文档中解释远程源必须返回 json 数据,它不是在谈论 纯文本响应, 我在 jsp/servlet 中开发我的应用程序,但我不知道如何创建 json 数据。

所以我发现了另一个 jquery 自动完成插件 --> autocomplete feature with java

本教程和脚本运行良好,但脚本没有我需要的相同选项。 我尝试保持相同的 getdata.jsp 和 servlet 页面以适应 jquery-ui-autocomplete 只是更改脚本的链接,firebug 告诉我 正确的响应请求,但未显示

ScreenShot of firebug

JavaScript 调用:

<script>
$(function() {

$( "#responsable" ).autocomplete({
    source: "getdata.jsp",
    minLength: 2
});
});
</script>

这里是 getdata.jsp 文件:

<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="fr.myldap.model.*"%>
<%
PersonneDB db = new PersonneDB();
String query = request.getParameter("term");

List<Personne> personnes = db.getData(query);

Iterator<Personne> iterator = personnes.iterator();

while(iterator.hasNext()) {
    String personne = (String)iterator.next().getNomComplet();
    out.println(personne);
}

%>

这是 PersonneDB 类,它返回人员列表

package fr.myldap.model;
import java.util.ArrayList;
import java.util.List;

public class PersonneDB {
private LDAPInterneDao piDao;
private LDAPExterneDao peDao;

public PersonneDB() {
    ContextVar var= new ContextVar();
    piDao = var.getPiDao();
    peDao = var.getPeDao();
}

public List<Personne> getData(String query) {
    List<Personne> matched = new ArrayList<Personne>(piDao.findByName(query));
    matched.addAll(peDao.findByName(query));

    return matched;
}
}

希望有人能帮帮我

【问题讨论】:

    标签: java jquery firebug jquery-autocomplete jquery-ui-autocomplete


    【解决方案1】:

    首先从this位置下载java的json库。

    现在要返回您需要遵循自己的格式的 JSON 数据,例如:

    {
        "firstName": "John",
        "lastName": "Smith",
        "address": {
            "streetAddress": "21 2nd Street",
            "city": "New York",
            "state": "NY",
            "postalCode": 10021
        },
        "phoneNumbers": [
            "212 732-1234",
            "646 123-4567"
        ]
    }
    

    如上所示,json数据可以有key:value对,对象可以存储在{ }中,数组可以存储在[ ]中等等。

    现在要将您的响应转换为 JSON 对象,您需要在您的 jsp 文件中导入以下语句:

    import net.sf.json.JSONObject; 
    

    (它可能会根据您下载的库而有所不同,您可以浏览 javadoc 了解更多详细信息)

    现在看下面的代码,创建一个 json 对象并返回它:

        JSONObject object=new JSONObject();
        object.put("name","Amit Kumar");
        object.put("employeeList",employeeList);
    ....
    ....
        System.out.println("json object = "+object);
        return object;
    

    它会自动将 key:value 对转换为正确的 JSON 对象...

    更新:

    所需的库:

    commons-lang 2.3
    commons-beanutils 1.7.0
    commons-collections 3.2
    commons-logging 1.1
    ezmorph 1.0.4.jar
    json-lib-2.2.2-jdk15.jar
    

    您可以从here下载全部:

    要将 arraylist 转换为 json,请使用以下示例代码:

    List mybeanList = new ArrayList();
    mybeanList.add(myBean1);
    mybeanList.add(myBean2);
    
    JSONArray jsonArray = JSONArray.fromObject(mybeanList);
    System.out.println("==== : "+jsonArray);
    
    Map map = new HashMap();
    map.put("beanlist", jsonArray);
    
    JSONObject jsonObject = JSONObject.fromObject(map);
    return jsonObject;
    

    【讨论】:

    • 谢谢你,我有 json 库,我理解你的解释,但我必须返回不止一个人来自动完成,我有一个我需要的人的 ArrayList,我想返回一个 JSON此对象列表的数据!
    • 同样返回json对象也不是结束,需要在客户端解析返回的JSON对象……所以也探索一下那部分……
    • javax.servlet.ServletException: java.lang.NoClassDefFoundError: 无法在 JSONArray.fromObject(list) 上初始化类 net.sf.json.JsonConfig;
    • 确保您的类路径中有所有必需的 jar 文件...并查看我的更正答案...
    • 我的回答包括最新版本的库和一个工作示例!
    【解决方案2】:

    了解如何创建 JSON。它正在取代 XML 作为信息交换媒介。

    http://www.roseindia.net/tutorials/json/json-jsp-example.shtml

    【讨论】:

    • 好的,但是我必须使用哪种语法和 JSON 数据类型? (数组、对象、字符串)例如:JSON{ personne1{ attr1{} attr2{} ... } personne2{ attr1{} attr2{} } }???
    • 我不知道如何将 json 对象返回给查询
    • 这是一个过于宽泛的说法。 XML 肯定仍然占有一席之地,并且在很长一段时间内都不会过时。然而,在这个例子中,我同意 JSON 是最轻量级的简单解决方案。 +1 以获得良好的链接
    【解决方案3】:

    您应该从json.org 开始,然后决定是先返回 JSON 数组还是对象。

    jQuery UI autocomplete 是一个非常灵活的插件,我认为最简单的解决方案是从您的 JSP 返回 JSON 以便使用该插件。

    我发现json-lib 很容易上手。您需要下载它和依赖项(commons-collectionscommons-langcommons-loggingezmorphcommons-beantils)并将它们添加到您的 WEB-INF\lib 目录中。

    然后你可以使用像JSONArray这样简单的东西:

    <%@page import="java.util.*, net.sf.json.*"%>
    <%
        List<String> data = new ArrayList<String>();
        data.add("John");
        data.add("Paul");
        data.add("George");
        data.add("Ringo");
        JSONArray json = JSONArray.fromObject(data);
        out.println(json);
    %>
    

    返回["John","Paul","George","Ringo"]

    如果您想返回 &lt;key, value&gt; 对,jQuery UI 自动完成功能也可以使用 JSONObject

    为了完整起见,我的WEB-INF\lib 目录包含以下内容:

    commons-beanutils-1.8.3.jar
    commons-collections-3.2.1.jar
    commons-lang-2.6.jar
    commons-logging-1.1.1.jar
    ezmorph-1.0.6.jar
    json-lib-2.4-jdk15.jar
    

    编辑:更新示例 JSP

    <%@page import="java.util.*, net.sf.json.*"%>
    <%!
    public class Person {
        private String name;
    
        public Person(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    %>
    <%
        List<Person> data = new ArrayList<Person>();
        data.add(new Person("John"));
        data.add(new Person("Paul"));
        data.add(new Person("George"));
        data.add(new Person("Ringo"));
    
        JSONArray json = JSONArray.fromObject(data);
        out.println(json);
    %>
    

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2015-05-30
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多