【发布时间】:2019-09-27 22:10:44
【问题描述】:
对 servletA 的 ajax 调用。 servletA 需要重定向或转发到另一个内容页面。可能吗。? 我在 Ajax 完成功能中看到了对重定向的响应,而不是转到重定向的内容页面。可能是我错过了一些重要但不知道的东西。我试图重定向到 aem servlet 中的另一个内容页面。它在网络选项卡中返回 200 OK 响应,但从不转到指定的重定向页面。
我的同事说 Ajax 调用重定向是不可能的,因为它是单独的线程请求,是吗?如果我说回应,我是在假设。发送重定向();将发出一个新请求并在浏览器窗口中加载响应。
@Component(
immediate = true,
service = Servlet.class,
property = {
"sling.servlet.paths=/bin/test/redirect"
})
public class TestRedirectServlet extends SlingAllMethodsServlet {
private static final long serialVersionUID = 3591693830449607948L;
@Override
protected void doGet(SlingHttpServletRequest request,
SlingHttpServletResponse response) {
PrintWriter writer = null;
try {
writer = response.getWriter();
// final RequestDispatcherOptions options = new RequestDispatcherOptions();
// final SlingHttpServletRequest syntheticRequest = new SyntheticSlingHttpServletGetRequest(request);
// request.getRequestDispatcher("/content/<project-name>/en_US.html", options).forward(syntheticRequest, response);
// return;
response.sendRedirect("/content/test-site/sample.html");
} catch(Exception e) {
} finally {
if (writer != null) {
writer.print("done");
writer.flush();
writer.close();
}
}
}
}
【问题讨论】:
-
添加您看到的 500 错误的堆栈跟踪会很有帮助。
-
首先我会删除所有
writer代码。我认为你不应该close()作者。这可能会引起麻烦。一般来说:你创建它,你关闭它。但是您没有创建writer。你从response得到它。所以你永远不应该close()它。 -
response.sendRedirect是客户端的事情,如果是 AJAX,你的朋友是正确的。您可以使用window.location发送一些 JSON 响应并处理重定向。在forward的情况下,您是否收到任何错误或您在 AJAX 回调中获得内容 html?