当前位置: 首页 > 面试题库 >

带有servlet的jQuery自动完成UI不返回任何数据

梁丘安晏
2023-03-14
问题内容

过去几个小时来,我一直在摆弄这个代码片段,但是我无法理解jQuery的自动完成UI的工作方式。我遵循了本教程http://viralpatel.net/blogs/tutorial-
create-autocomplete-feature-with-java-jsp-
jquery/,

我使用了相同的示例,但是我使用了一个servlet来代替向JSP发送请求。该请求到达servlet“
Fetcher”,它也执行,但是什么都没有返回到页面。这是代码。

public class Fetcher extends HttpServlet {
    [...]

    List<String> countryList = new ArrayList<String>();
    String param = request.getParameter("term");

    countryList.add("USA");
    countryList.add("Pakistan");
    countryList.add("Britain");
    countryList.add("India");
    countryList.add("Italy");
    countryList.add("Ireland");
    countryList.add("Bangladesh");
    countryList.add("Brazil");
    countryList.add("United Arab Emirates");
    PrintWriter out = response.getWriter();
    response.setContentType("text/plain");
    response.setHeader("Cache-Control", "no-cache");
     for(String country : countryList){
        out.println(country);
    }

    [...]
}

HTML中的Javascript片段:

 <script>
       $(function() {

         $( "#tags" ).autocomplete({
          source: "Fetcher"

      });
 });
 </script>

HTML形式:

 <label for="tags">Tags: </label>
 <input id="tags" />

该页面上的示例似乎是为jquery专业人士http://jqueryui.com/autocomplete/#default编写的
。拜托,有人可以告诉我它是如何工作的,以便我可以在其他地方使用它。


问题答案:

servlet的 应该返回自动完成数据作为JSON。有几个选项,我选择了一个包含带有标签/值属性的对象的数组:

@WebServlet("/autocomplete/*")
public class AutoCompleteServlet extends HttpServlet {
    @Override
    protected void doPost(final HttpServletRequest request,
            final HttpServletResponse response) throws ServletException,
            IOException {

        final List<String> countryList = new ArrayList<String>();
        countryList.add("USA");
        countryList.add("Pakistan");
        countryList.add("Britain");
        countryList.add("India");
        countryList.add("Italy");
        countryList.add("Ireland");
        countryList.add("Bangladesh");
        countryList.add("Brazil");
        countryList.add("United Arab Emirates");
        Collections.sort(countryList);

        // Map real data into JSON

        response.setContentType("application/json");

        final String param = request.getParameter("term");
        final List<AutoCompleteData> result = new ArrayList<AutoCompleteData>();
        for (final String country : countryList) {
            if (country.toLowerCase().startsWith(param.toLowerCase())) {
                result.add(new AutoCompleteData(country, country));
            }
        }
        response.getWriter().write(new Gson().toJson(result));
    }
}

要返回自动完成数据,可以使用以下帮助程序类:

class AutoCompleteData {
    private final String label;
    private final String value;

    public AutoCompleteData(String _label, String _value) {
        super();
        this.label = _label;
        this.value = _value;
    }

    public final String getLabel() {
        return this.label;
    }

    public final String getValue() {
        return this.value;
    }
}

因此在servlet中,实际数据被映射为适合jQuery自动完成的形式。我选择了Google GSON将结果序列化为JSON。

有关:

  • 使用AJAX源代码和appendTo了解并实现Jquery自动完成功能

对于 HTML文档 (在.jsp中实现),请选择正确的库,样式表和样式:

<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.js"> </script>
        <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"> </script>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />

        <script type="text/javascript" src="autoComplete.js"> </script>
    </head>

    <body>
        <form>
            <div class="ui-widget">
                <label for="country">Country: </label>
                <input id="country" />
            </div>
        </form>
    </body>
</html>

相关:jQuery自动完成演示

我把 Javascript函数 放在一个单独的文件中autoComplete.js

$(document).ready(function() {
    $(function() {
        $("#country").autocomplete({
            source: function(request, response) {
                $.ajax({
                    url: "/your_webapp_context_here/autocomplete/",
                    type: "POST",
                    data: { term: request.term },

                    dataType: "json",

                    success: function(data) {
                        response(data);
                    }
               });              
            }   
        });
    });
});

自动完成功能使用AJAX请求来调用servlet。由于servlet是合适的,因此它可以原样用于响应。

有关:

  • jQuery自动完成小部件
  • jQuery ajax函数


 类似资料:
  • 问题内容: 任何人都可以给我完整的步骤来使用jquery-ui自动完成功能。我正在使用grails 2.0.1。 我需要一个完整的示例,包括控制器和视图的代码。 提前致谢。 问题答案: 首先,您需要将main.gsp(在头部)添加到行中 插件将自动下载。 对于完整的示例,您可以使用此链接 http://jay-chandran.blogspot.com/2011/09/using-grails-w

  • 问题内容: 我正在尝试找到一种将jQuery自动完成与回调源结合使用的方法,该回调源通过ajax json对象列表从服务器获取数据。 有人可以给些指示吗? 我用谷歌搜索,但找不到完整的解决方案。 问题答案: 带有源代码的自动完成文档中的完美示例。 jQuery HTML

  • 问题内容: 我对JQuery相当陌生,也许想尝试一些对初学者来说可能有点难的事情。但是,我试图创建一个自动完成功能,该功能将当前值发送到PHP脚本,然后返回必要的值。 这是我的Javascript代码 这是“ myscript.php”的后半部分 产生以下输出 谁能告诉我我要去哪里错了?开始变得很沮丧。输入框只是变成“白色”,没有显示任何选项。如果我指定一个值数组,该代码可以正常工作。 更新 我已

  • 问题内容: 好吧,我一直在为此绞尽脑汁(这太糟糕了),但是我一直尝试阅读我所能而且仍然无法使它起作用的内容。 试图用jQuery UI做自动完成 我的json看起来像这样 我正在尝试将此信息用作自动完成的来源。我得到的响应对象很好,我很难以正确的格式获得它,因此我可以将“ ”放在与“值”相关联的隐藏字段中,该字段需要显示为“值”的一部分落下。 尝试了一百万种不同的方法,但最近的尝试却在下面 请多谢

  • 根据用户输入值进行搜索和过滤,让用户快速找到并从预设值列表中选择。 如需了解更多有关 autocomplete 部件的细节,请查看 API 文档 自动完成部件(Autocomplete Widget)。 本章节使用到 search.php 下载。 默认功能 当您在输入域中输入时,自动完成(Autocomplete)部件提供相应的建议。在本实例中,提供了编程语言的建议选项,您可以输入 "ja" ,可

  • 我想使用jQuery ui的自动完成功能,但我有一个问题。 我使用谷歌的外部库: 我的自动完成脚本 我有一个错误: jQuery。延迟异常:$(…)。自动完成不是函数类型错误:$(…)。自动完成不是一个函数 在HTMLDocument。(http://localhost/sitename/script.js:382:16)在j(https://ajax.googleapis.com/ajax/li