将SQL数据带到jquery availabletag

时间:2015-07-29 06:40:06

标签: java jquery jsp autocomplete

我正在尝试制作自动填充文本框,但是如何将SQL数据包含到jquery可用标记并循环呢?我无法基于以下代码执行该功能。任何帮助,将不胜感激!感谢

这是我的预期输出:Expected Result Demo

jquery代码错误

我的文本框仅列出数据库中的最后一行数据。 enter image description here

<%
    String FRUIT_CODE = "";
    String FRUIT_DESCP= "";
    Vector vFruit     = new Vector();

    TEST.makeConnection();
    String SQL = "SELECT CODE,DESCP FROM TB_FRUIT WITH UR";
    TEST.executeQuery(SQL);     
    while(TEST.getNextQuery())
    {
        FRUIT_CODE  = TEST.getColumnString("CODE");
        FRUIT_DESCP = TEST.getColumnString("DESCP ");
        Vector vRow = new Vector();
       vRow.addElement(FRUIT_CODE);
       vRow.addElement(FRUIT_DESCP);
       vFruit.addElement(vRow);
    }   
    TEST.takeDown();    
   %>

  <html>
  <head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">

  <script>
  $(function() {
  var availableTags = 
   [{
   <%
     String COMBINE = "";
     String CODE2   = "";
     String DESC1   = "";
     for(int i=0;i<vFruit.size();i++)
     {
        Vector vRow     = (Vector) vFruit.elementAt(i);
            CODE2       = (String) vRow.elementAt(0);
            DESC1       = (String) vRow.elementAt(1);
            COMBINE     += "\"" + CODE2 +"    "+ DESC1 + "\",";     
     }
        COMBINE  = COMBINE.substring(0, COMBINE.length()-1);

       //Combine result = "10000 Apple","20000 Orange", "30000 Mango", "40000 Banana"
    %>

        "value":  <%=CODE2%>,
        "label":  <%=COMBINE%>
    }]; 

   $("#MODEL").autocomplete({
      source: availableTags,
       focus: function (event, ui) {
        event.preventDefault();
        $("#MODEL").val(ui.item.value);
       }
     });
  });
  </script>    

  <body>
       <div class="ui-widget">
         <label for="tags">Tags: </label>
         <input id="MODEL">
       </div>
  </body>
</html>

1 个答案:

答案 0 :(得分:0)

生成availableTags的scriptlet不会为vFruit向量中的每个值添加新对象,仅针对最后一个值。它应该像这样打补丁:

var availableTags = [
<%
  String CODE2   = "";
  String DESC1   = "";
  for(int i=0;i<vFruit.size();i++)
  {
    Vector vRow     = (Vector) vFruit.elementAt(i);
    CODE2       = (String) vRow.elementAt(0);
    DESC1       = (String) vRow.elementAt(1);
    if (i > 0) out.print(",");
%>
    {
      "value":  "<%= CODE2 %>",
      "label":  "<%= DESC1 %>"
    }  
<%
  }
%>
]; 

$("#MODEL").autocomplete({
...

顺便说一下。为什么Vector而不是{1}} ArrayList?你需要一个线程安全的实现吗?它似乎不是这样。