我有一个servlet。它的工作方式是-我发送动作名称,servlet创建动作对象,执行某些任务,然后将字符串view作为结果返回- 我应该发送给用户的页面。Servlet doGET和for的工作原理相同doPost。
view
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页面。
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对象的请求。
<select>
id = "re"
$("#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在#+键更改中既不出现也不显示值。因此,似乎功能无法正常工作。那么如何正确地从Action返回JSON对象呢?我调试器AjaxAction创建对象和return "main";。
alert
AjaxAction
return "main";
return null;
document.location="anotherpage";