【问题标题】:Converting array of HahMap into json object in servlet and display it in jsp page将HashMap数组转换为servlet中的json对象并在jsp页面中显示
【发布时间】:2014-05-09 10:12:52
【问题描述】:

我想获取所有表行并将它们添加到 hashmap 数组中,然后将它们转换为 json 对象以使用 ajax 和 jquery 发送到 jsp 页面。我在 jsp 页面中显示内容时遇到问题。 我已经设法编写了下面的代码,需要帮助来纠正/改进它,我很困惑如何在 jsp 页面中显示它。我是 jquery 和 json 的初学者。

   try {
       String res = request.getParameter("hello");
       String user = "";
       String pass = "";
       String port = "";
       String dbname = "";
       String host = "";
       String driver = "oracle.dbc.driver.OracleDriver";
       Connection con;
       PreparedStatement ps;
       ResultSet rs;
       String json = null;
       String url = "jdbc:oracle:thin:@"+host+":"+port+":"+dbname;

       Map<String,String> map = new HashMap<String,String>();
       List<Map<String,String>> list = new ArrayList<Map<String,String>>();

       try{
            Class.forName(driver).newInstance();
            con = DriverManager.getConnection(url,user,pass);
            ps = con.prepareStatement("select * from employee");

            rs = ps.executeQuery();
            while(rs.next()){
                map.put("name", rs.getString(1));
                map.put("id", rs.getString(2));
                map.put("salary",rs.getString(3));
                list.add(map);
            }                
            json = new Gson().toJson(list);
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(json);
       }catch(Exception e){               
       }


    } finally {            
        out.close();
    }

index.jsp

<script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
        $(document).ready(function(){
            $("#push").click(function(){
               var value = $("#t").val();
               $.post('jsonServlet',{hello:value},function(data){

             //     ??
              //    ??
              //    ??

               });
            });            
        });
    </script>
</head>
<body  style="position: absolute;min-height: 700px;min-width: 1300px">
    <form>
        <input type="button" value="PushMe" id="push">
        <input type="text" id="t" value="my data">
        <div style="position: absolute;height: 50%;width: 60%;" id="myDiv">

        </div>
    </form>        
</body>

在jsp页面需要帮助才能在div中显示hash map的内容... 稍后我将使用文本框更改 div 以存储各个列的值,以便用户可以修改表的内容并再次更新表的行。

需要帮助

【问题讨论】:

    标签: java javascript jquery json jsp


    【解决方案1】:

    使用地图看起来不错,而是创建一个类:

    class Person{
        public final String name;
        public final String id;
        public final String salary;
        public Person(String name, String id, String salary){
            this.name=name;
            this.id=id;
            this.salary=salary;
        }
    }
    

    不需要是公共类,你可以把它放在你的servlet java文件中。 Gson 知道如何将类序列化为 json。

    从数据库中读取:

    while(rs.next()){
        list.add(new Person(rs.getString(1),rs.getString(2),rs.getString(3)));
    }  
    

    在你的 javascript 中是这样的:

    $.post(
        'jsonServlet', // <- may screw up path here
        { hello: value },
        function(data){
            var table = '<table>';
            for(var i = data.length, l = data.length; i>0; i--){
                // one of over 9000 ways to make js loops work faster
                var person = data[l-i]; // <- this one also does not screw up order
                var row = '<tr>';
                row +='<td>'+person.name+'</td>';
                row +='<td>'+person.id+'</td>';
                row +='<td>'+person.salary+'</td>';
                row +='</tr>';
                table += row;
            }
            table += '</table>';
            $('#myDiv').html(table);
        },
        'json'
    );  
    

    您可能希望在 jsp 中的某个地方事先准备好表格,可能在隐藏的 div 中并将其用作模板。

    【讨论】:

    • 关于 for() 设计:截至目前,javascript 向下循环比向前循环快数百倍,在所有浏览器中始终如一。缓存数组的长度几乎没有任何影响。 jsperf.com/loopy-arrays/3
    • 谢谢你,先生真的很有帮助。
    • 您好先生,我知道我将其标记为已解决,但仍然存在问题。我没有从我的 jsp 中的 servlet 获取值。甚至不是一个简单的字符串。我的 gson() 方法或 ajax 调用中的 url 模式有什么问题吗?
    • 尝试在浏览器开发工具 > 网络控制台中检查服务器的响应。如果是一些 404 错误(并且您实际上看到完整的 url 是错误的),那么它的 url。如果它是空响应或 500 内部具有正确的请求标头,那么您的 java 是错误的。我不会去猜测。
    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2011-08-24
    • 1970-01-01
    • 2012-08-22
    • 2014-05-19
    相关资源
    最近更新 更多