【发布时间】:2017-10-18 18:43:38
【问题描述】:
我有一个场景,我需要从 AEM 中的一个页面调用同一应用程序中的另一个 AEM 页面,并且我需要传递一些隐藏参数。我选择通过 POST 来完成,以下是我遵循的步骤: 从页面“A”开始,我通过 POST 向 sling servlet 提交了表单并传递了一些参数。 2. 在 servlet 中,使用请求调度程序,我使用以下代码 sn-p 将相同的请求和响应重定向到 doPost 方法中的不同页面:
request.getRequestDispatcher("/content/company/en/apps/welcomepage.html").forward(request, response);
当我运行代码时,我可以通过表单提交调用 servlet,但我无法重定向到新页面。我在日志中看到以下错误:
18.10.2017 14:41:00.802 错误 [127.0.0.1 [1508352060795] POST /bin/rap/welcomepage HTTP/1.1] org.apache.sling.servlets.post.impl.operations .ModifyOperation 响应处理期间出现异常。 javax.jcr.nodetype.ConstraintViolationException:没有匹配的属性定义:约会类型 ID = platform001d 在 org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.setProperty(NodeDelegate.java:522) 在 org.apache.jackrabbit.oak.jcr.session.NodeImpl $35.perform(NodeImpl.java:1375) 在 org.apache.jackrabbit.oak.jcr.session.NodeImpl $35.perform(NodeImpl.java:1363) 在 org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:208) 在 org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112) 在 org.apache.jackrabbit.oak.jcr.session.NodeImpl.internalSetProperty(NodeImpl.java:1363)
如果我在 doGet 方法中尝试相同的代码,它可以正常工作。此外,如果我使用 response.sendRedirect("/content/company/en/apps/welcomepage.html") 它也可以正常工作。但是这个问题是它作为对页面的新请求启动它并且它丢失了我从表单提交中获得的所有参数。有人可以让我知道如何通过 POST 将请求重定向到 AEM 中的页面,因为我需要传递一些在 url 中不可见的隐藏参数?
【问题讨论】:
-
当您转发帖子时,它会调用 slingPostServlet 尝试修改该资源并失败。这就是为什么你得到那个例外。