【问题标题】:How to send json ouput from servlet to jsp?如何将 json 输出从 servlet 发送到 jsp?
【发布时间】:2015-06-23 19:59:08
【问题描述】:

我正在进行库存控制。我试图检查输入的项目数量是否少于库存数量。我得到了servet json输出。但是我不能把它发回jsp。

Jsp JQuery 代码。

<script>
        $('document').ready(function() {
            $('#submit_btn').click((function() {
                var $name = $("select#item_name").val();
                var $qty = $("input#qty").val();

                $.post('BuyItem', {item_name: $name, item_qty: $qty}, function(data) {
                    if (data !== null) {
                        alert(text(data));
                        $("input#qty").val("");
                    } else {
                        alert("Invalid Item!");
                    }
                }
                );
            }));
        });
    </script>

这是 servlet 查询。

   while (rs.next()) {

                if (rs.getInt("qty") > qty) {
                    int id = rs.getInt("item_id");
                    Gson gson = new Gson();
                    String json = gson.toJson(id);
                   // System.out.println("one" + json);
                    response.setContentType("application/json");
                    //            response.setCharacterEncoding("UTF-8");
                    response.getWriter().print(json);
                } else {
                    Gson gson = new Gson();
                    String json = gson.toJson("Stock doesn\'t have enough item quantity.");
                  //  System.out.println("two" + json);
                    response.setContentType("application/json");
                    //          response.setCharacterEncoding("UTF-8");
                    response.getWriter().print(json);
                }
            }


System.out.println() 的输出总是正确的。但不发送回jsp。请帮我解决一下这个。

【问题讨论】:

  • 试过response.getWriter().write(json)?
  • js点击函数中的double(())
  • @PramodKarandikar 建议发回 json 而不是文本
  • @Pramod Karandikar 试过了,对 jsp 没有反应
  • @madalin ivascu 什么?你能解释一下吗?

标签: java jquery json jsp servlets


【解决方案1】:

你必须做的也是一个最佳实践是创建一个 DTO 类,其中包含你需要传递给 gson 库的属性。

    public class ResponseDTO implements Serializable{
          private Integer id;
          //more properties ...

          public Integer getId() {
            return id;
          }
          public void setId(Integer id) {
              this.id= id;
          }  

           // other getters & setters
   }

在循环中,将值设置为 dto 对象,然后将其传递给 gson。

Gson gson = new Gson();
          ResponseDTO dto = null;
          String json = "";
          response.setContentType("application/json");
          ......
          if (rs.getInt("qty") > qty) {
                dto = new ResponseDTO();
                int id = rs.getInt("item_id");
                dto.setId(id); 
                ......

                json = gson.toJson(dto);            
            } else {
               ...... // similar
                json = gson.toJson("{data: 'Some message'}");
            }
        response.getWriter().print(json);

gson 将为您提供正确的 json 结构到客户端。 试试看!

【讨论】:

  • 您的实际问题是什么?不是“如何将 json 输出从 servlet 发送到 jsp”吗? ???
  • 刚刚修改了我的代码,尝试使用 dto 方法,让我知道您在客户端获得的“数据”输出。(我假设您的查询返回正确的结果/数据)
【解决方案2】:

Gson 允许字符串和数字自行序列化为 JSON(根据定义,这可能是可以的),但许多其他库会认为这是无效的 JSON。

尝试将您的响应包装在一个对象中,以便响应为{"id": 5} 而不仅仅是5

【讨论】:

  • 你的意思是这样。?字符串 json = gson.toJson("id":rs.getInt("item_id"));或者你能解释更多吗?
  • 你可以做这样的事情,但它有点脏。为了让它工作,用{}包裹整个东西
  • 再想一想,这并不能解决问题。您需要做的是将结果包装在一个对象中,例如地图或数组。
  • 例如:Map myMap = new HashMap(); myMap.put("itemId", rs.getInt("item_id"); gson.toJson(myMap);
  • 究竟jquery如何采用这种形式的jsp页面?
猜你喜欢
  • 2013-08-13
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2021-08-03
  • 2013-04-27
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多