代码之家  ›  专栏  ›  技术社区  ›  mrjayviper

AEM/吊索:如何实现动态吊索选择器?

  •  0
  • mrjayviper  · 技术社区  · 6 年前

    太长,读不下去了 :我想设置一个AEM页面,使用SEO友好的URL接受firstname和lastname作为参数。

    转到www.host。com/我的内容。理查德。威廉姆斯。html将显示与Richard Williams相关的信息。

    如果我去www.host。com/我的内容。约翰。史密斯。html,页面将显示与John Smith相关的信息。


    SEO友好示例 :www.host。com/我的内容。理查德。威廉姆斯。html

    不利于SEO的示例 :www.host。com/我的内容。html?firstname=理查德;姓氏=williams


    因此,我一直遵循此指南(不确定这是否是帮助我的最佳示例/指南): http://www.aemcq5tutorials.com/tutorials/sling-servlet-in-aem/

    虽然对我来说效果很好

    @SlingServlet(resourceTypes="geometrixx/components/hompepage", selectors={"firstname","lastname"}, extensions="html",methods="GET", metatype=true)
    

    我正在努力让它充满活力。

    目前,我只能通过以下方式访问servlet: http://localhost:4502/content/geometrixx/en.firstname.lastname.html

    我想创建firstname和lastname动态参数/选择器。例如,如果我想传递值“richard.williams”,那么我可以使用: http://localhost:4502/content/geometrixx/en.richard.williams.html

    如果我尝试使用 http://localhost:4502/content/geometrixx/en.richard.williams.html 现在,我得到一个空白页。

    因此,基本上我想使用选择器将参数值传递到我的页面。

    有什么办法吗?

    附言:目前,我只在我的本地AEM实例中进行测试/实验。

    3 回复  |  直到 6 年前
        1
  •  4
  •   SubSul    6 年前

    sling中的选择器不提供在URL路径中放置变量的功能。i、 e.您不能像在Spring中那样将{pathParam}添加到sling servlet URL。

    通常,不建议将选择器用作函数的输入。它们的使用更像是文件扩展名。 例如请求/我的内容。html返回与/mycontent相同的资源。可移动的html。唯一的区别是,后者要求提供一个手机友好的版本。

    另一方面,请求参数用于向servlet提供输入。


    我想不出任何直接的方法将servlet附加到sling中的动态路径。您可以尝试使用 suffix ,它们可以在dispatcher中缓存,但我无法评论使用 后缀

    考虑此URI- /mycontent/user.json/john/smith

    使用路径注册servlet /mycontent/user 您可以使用 String[] names = request.getRequestPathInfo().getSuffix().split(suffix, '/') 检索后缀内容。

    看看下面的答案 question 吊索 ResourceProvider 并与集成 jax-rs 还有其他方法可以做到这一点。

        2
  •  1
  •   Mateusz Chromiński    6 年前

    从技术上讲,使用 OptingServlet (参见 https://sling.apache.org/documentation/the-sling-engine/servlets.html#optingservlet-interface )

    你的 accepts 方法可以很容易地识别预期的 resourceType 并做出适当反应。

    正如文档中提到的那样,这种方法不被鼓励,Subhash提出的使用后缀的解决方案似乎更加优雅。

        3
  •  0
  •   Saurabh Sharma    5 年前

    您可以创建一个从请求中读取选择器的组件,并将该组件添加到en中。html