【发布时间】:2013-07-30 20:31:44
【问题描述】:
我有一个 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";。
【问题讨论】: