【问题标题】:CQ5.5: Accessing a referring resource in a osgi servletCQ5.5:访问 osgi servlet 中的引用资源
【发布时间】:2014-04-08 22:19:56
【问题描述】:

我很好奇是否有一种方法可以从 OSGI Servlet 内部访问引用资源。

例子:

  1. 我有一个表单组件
  2. 表单组件提交到 /bin/form(一个 servlet)
  3. 在 /bin/form 的 servlet 中,我想访问表单组件资源 - 不知道如何执行此部分

任何想法/想法将不胜感激。

谢谢你, 布罗迪

【问题讨论】:

标签: osgi aem sling


【解决方案1】:

您可以在组件资源路径中添加隐藏值:

<input type="hidden" name="resourcePath" value="${resource.path}"/>

值将在 servlet 代码中作为 resourcePath 参数提供:

String resourcePath = request.getParameter("resourcePath");

您应该检查资源路径是否为有效值,因为恶意用户可以在那里设置他们想要的任何东西。

另外,请考虑第二种方法:您可以将其绑定到您的组件资源类型,而不是将 servlet 绑定到静态路径 /bin/form。假设这个资源类型是myapp/component/form。在这种情况下,您可以按如下方式声明 servlet:

@SlingServlet(resourceTypes="myapp/component/form", methods="POST", selectors="form")
public FormServlet extends SlingAllMethodsServlet {
    public doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
        Resource formResource = request.getResource();
        // ...
    }
}

表单代码应如下所示:

<form action="${resource.path}.form.html" method="post">
    <!-- your form contents here -->
</form>

这种方法的优点:

  • 您可以像request.getResource()一样简单地获取表单资源,
  • 您无需执行额外的资源路径参数验证,
  • 它更RESTful

【讨论】:

  • 对使用资源类型绑定 servlet 的第二种方法大 +1 - 这是支持 CQ 的 Apache Sling 中自然推荐的方法。
  • 对不起,我花了这么长时间才接受,这太棒了。我没有考虑将 post 处理程序绑定到表单组件本身。这使它更容易处理。
猜你喜欢
  • 2014-04-27
  • 2011-04-01
  • 1970-01-01
  • 2014-01-14
  • 2012-09-05
  • 2023-03-03
  • 2017-12-31
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多