有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用ajax填充servelet的下拉列表

我需要使用ajax从数据库中填充下拉列表,Iam使用两个下拉列表,如果选择了第一个下拉列表值,则必须显示第二个下拉列表值(必须根据第一个下拉列表中选择的值从DB中检索)。DAO(数据访问层)将4个结果作为arraylist对象返回,但在http responsetext中,它将作为对象而不是值打印。我尝试使用for循环来迭代它,但我无法实现它。请在这方面帮助我

HTML代码:

    // First Drop Down
    Question Field :<select name="ddlAddQuestionField" id='ddlAddQuestionField' onchange="getFieldPosition()">
        <option value=''>Select Question Field</option>
        <option value='Security Question'>Security Question</option>
        <option value='Personal Info'>Personal Info</option>
    </select>

    // Second DropDown

    User Field Position:<select name="userFieldPosition" id="userFieldPosition" disabled="disabled"> </select>

Javascript代码

function getFieldPosition(){

                    var fieldName =$("#ddlAddQuestionField").val();

                    if(window.XMLHttpRequest){
                        xmlhttp=new XMLHttpRequest();
                    } else {
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    xmlhttp.onreadystatechange=function() {

                        if(xmlhttp.readyState==4 && xmlhttp.status==200){

                            document.getElementById("userFieldPosition").disabled=false;                            
                            alert(xmlhttp.responseText);
                            var response =xmlhttp.responseText;

                            for(var i=0;i<response.length;i++) {
                                var elements = "<option value='"+response[i]+"'>"+response[i]+"</option>";
                                $("#userFieldPosition").append(elements);
                            }
                        }
                      }
                        xmlhttp.open("POST","ApplicationController",true);
                        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                        xmlhttp.send("fieldAction=fieldPosition&fieldName="+fieldName);
                }

维修代码

fieldPositionObj = fieldPositionDaoObj.getFieldPosition(fieldName);   //Hitting the Dao

              // In dao it returns arraylist object.     

            response.setContentType("text/plain");  
                response.setCharacterEncoding("UTF-8"); 
                response.getWriter().write(fieldPositionDaoObj);

共 (3) 个答案

  1. # 1 楼答案

    有一些特定的框架,比如ExtJs,可以让你不用编写太多代码就可以做到这一点。我能想到的唯一方法是将第二个下拉框放在div标记中。在选择第一个下拉框时,调用将发出ajax请求的函数。获得success响应后,通过使用这些值创建一个新的下拉框来重写div的内容

  2. # 2 楼答案

    你的问题是线路

     response.getWriter().write(fieldPositionDaoObj);
    

    您正在直接根据响应编写java Obejct。。我认为fieldPositionDaoObj是列表或数组。。所以toString表示是

    (com.bean.QuestionInfoBean@23d275, com.bean.QuestionInfoBean@1ce15f6, com.bean.QuestionInfoBean@103fcaa, com.bean.QuestionInfoBean@c135d6) 
    

    其中com.bean.QuestionInfoBean@c135d6是Java对象的字符串表示

    我认为您需要返回的是Java对象/列表/数组的JSON响应,您的代码可以正常工作

    JSON (JavaScript Object Notation), is a simple and easy to read and write data exchange format. It’s popular and implemented in countless projects worldwide, for those don’t like XML, JSON is a very good alternative solution.

    您的JSON表示应该如下所示

    [ First,Middle,Full,Last]

    或者

    [{First},{Middle},{Full},{Last}]

    您可以编写自己的方法,比如public String getJSOnRepresentation();

    然后呢

    response.getWriter().write(fieldPositionDaoObj.getJSOnRepresentation());
    

    Sample example on What and how to code

    也看到

    http://json.org/java/ https://github.com/douglascrockford/JSON-java/blob/master/JSONString.java https://github.com/douglascrockford/JSON-java/blob/master/JSONArray.java https://github.com/douglascrockford/JSON-java/blob/master/JSONObject.java

  3. # 3 楼答案

    我尝试了下面提到的代码,现在运行良好

    JAVA脚本:

      if(xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById("userFieldPosition").disabled=false;                            
            var response = JSON.parse(xmlhttp.responseText);
            for(var i=0;i<response.length;i++){
                elements  += "<option value='"+response[i].fieldPosition+"'>"+response[i].fieldPosition+"</option>";
            }
            $("#userFieldPosition").append(elements);
            }
    }
    

    服务:

     Gson gson = new Gson();
     String json = new Gson().toJson(fieldPositionObj);
     response.getWriter().print(json);