CQ5.5:访问osgi servlet中的引用资源

时间:2014-04-08 22:19:56

标签: osgi cq5 sling

我很好奇是否有办法从OSGI Servlet中访问引荐来源资源。

示例:

  1. 我有一个表单组件
  2. 表单组件提交到/ bin / form(servlet)
  3. 在/ bin / form的servlet里面我想访问表单组件资源 - 不知道如何做这个部分
  4. 任何想法/想法将不胜感激。

    谢谢你, 布罗迪

1 个答案:

答案 0 :(得分:3)

您可以使用组件资源路径添加隐藏值:

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

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

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

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

另外,请考虑第二种方法:您可以将servlet绑定到组件resourceType ,而不是将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