【发布时间】:2014-09-23 19:01:09
【问题描述】:
我像这样创建了一个 sling servlet 骨架......
@SlingServlet(paths = "/bin/foo/bar", methods = "POST")
public class FooBarServlet extends SlingAllMethodsServlet {
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
response.setHeader("Content-Type", "text/plain");
response.getWriter().write("foo bar");
LOGGER.info("hello world");
}
}
我为我的组件创建了一个编辑配置
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:primaryType="cq:EditConfig">
<cq:listeners jcr:primaryType="cq:EditListenersConfig"
afteredit="myapp.components.foobar" />
</jcr:root>
我创建了一个cq:ClientLibraryFolder 并添加了这个js
var myapp = { components : {} };
myapp.components.foobar = function(component, reloadPage) {
var oncomplete = function(success) {
if (success) {
if (reloadPage) document.location.reload();
else component.refreshSelf();
} else
console.log('could not foobar on component ' + component.path);
};
CQ.HTTP.post('/bin/boo/bar', oncomplete, { path : component.path });
};
我的页面加载,我的组件加载,我的 clientlib js 加载,我在控制台中没有看到任何错误。我编辑我的组件并点击确定。我的 servlet 被命中,我跟踪日志服务器端并没有看到任何错误。当我打开控制台进行跟踪时,我看不到客户端错误。我的回答是 200 好的。一切看起来都很棒!除了我在浏览器的右上角不断收到“未指定的错误”
鉴于我在服务器端日志上没有看到任何错误,在客户端控制台上也没有任何错误,有谁知道我什至从哪里开始解决这个问题?
更新
感谢@rakhi4110 对CQ.HTTP 的引用。我能够从该文档中找到一些东西
首先,设置suppressErrorMsg标志隐藏错误信息
CQ.HTTP.post('/bin/foo/bar', oncomplete, { path : component.path }, null, true);
第二,我不喜欢压抑的东西,所以我试着像这样制作我的回应
{
"headers" :
{
"Status":200,
"Message":"foo bar"
}
}
然而这并没有起到任何作用。
第三,在查看 CQ.HTTP api 时,我注意到其中很多内容被贬低为支持CQ.shared.HTTP。简单地使用 post 函数,没有抑制,工作
CQ.shared.HTTP.post('/bin/foo/bar', oncomplete, { path : component.path });
现在我坚持使用选项 #3,直到我能找出正确的 json 响应。
【问题讨论】: