0

我有一个servlet。它的工作原理是这样的——我发送动作名称,servlet 创建动作对象,执行一些实际任务,然后返回字符串view作为结果——我应该发送给用户的页面。Servlet 对于doGET和 对于的工作方式相同doPost

    String name = getActionName(req);

    Action action = (Action) pico.getComponentInstance(name);

    String view = action.exec(req, resp);
    // router
    if (view.startsWith("redirect:")) {
        resp.sendRedirect(view.substring("redirect:".length(),
                view.length()));
    } else {
        getServletContext().getRequestDispatcher(
                "/" + view + ".jsp").forward(req, resp);
    } 

我有 AjaxAction,我从请求中获取值,从数据库中获取对象,将其转换为 json 字符串。但是如何从行动中恢复它呢?动作返回字符串,表示用户应该被发送到的下一页。我把他送到main页面。

    String requestId = req.getParameter("requestId");
    Long id = Long.valueOf(requestId);
    Request item = requestDao.read(id); 
    String json = "";
    json = new Gson().toJson(item);

    resp.setContentType("application/json");
    resp.setCharacterEncoding("UTF-8");
    try {
        resp.getWriter().write(json);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "main";

每次更改<select>(使用id = "re")中的值时,我都会发送对 JSON 对象的请求。

   $("#re").change(function() {
        var $id = $('#re').val();
        $.get('AjaxAction.do', {
            requestId : $id
        }, function(respJSON) {
                            alert(respJSON);
            $.each(respJson, function(key, value) {
                $('#' + key).val(value);
            });
        });
    });

alert在#+key 变化中既没有出现也没有价值。所以似乎功能不起作用。那么如何正确地从 Action 中返回 JSON 对象呢?我调试器AjaxAction创建对象和return "main";.

4

1 回答 1

0
  1. 更改return "main";return null;
  2. 之后,您将能够在同一页面上获得 ajax 响应和 alert();
  3. 如果需要,您现在可以将用户重定向到另一个页面,而不是警报document.location="anotherpage";
于 2013-07-30T23:21:22.847 回答