【问题标题】:Use sling models to get data from a backend service使用 sling 模型从后端服务获取数据
【发布时间】:2016-12-06 15:14:11
【问题描述】:

我有一个扩展 SlingAllMethodsServlet 的 servlet,它正在从后端服务请求数据,并且当前正在响应对象中发回 JSONObject。我想使用 SlingModels。这可以使用我创建的 servlet 来完成,还是我必须将所有 servlet 代码放入 SlingModel 类的 activate 方法中?如果可以,能举个例子吗?

【问题讨论】:

  • 你到底想做什么?我是否正确理解您希望在 Sling 模型中重用 Servlet 在 HTTP 响应中返回的相同数据?

标签: java servlets aem sling


【解决方案1】:

通过将对后端服务的调用以及相关逻辑封装在 OSGI 服务中,可以很好地满足您描述的场景。通过这种方式,服务可以由您的 Servlet 提供@Referenced,并由您的 Sling Model 类提供@Injected。

然后,Servlet 的工作将被简化为在引用的 Service 上调用适当的方法并将返回值序列化为 JSON。同样,Sling 模型的工作将简化为在注入的 Service 上调用适当的方法,并将返回值暴露给 HTL/JSP/getter 中的任何内容。

【讨论】:

    【解决方案2】:

    sling 模型的作用是让您能够创建一个代表特定 Sling 资源的小 bean。 例如,您可能有一些具有标题和文本的资源。然后,您可以简单地编写一个名为 TitleTextModel 的 Sling 模型,将这些属性注入 bean:

    @Model(adaptables = Resource.class)
    public class TitleTextModel{
    
      @ValueMapValue
      private String text;
    
      @ValueMapValue 
      private String title;
    
      public String getText() {
          return text;
      }
    
      public String getTitle() {
          return title;
      }
    
    }
    

    如果你想从你的 Servlet 中使用类似的东西,你只需要获取适当的资源并将其适应你的模型类:

    TitleTextModel myModel=resource.adaptTo(TitleTextModel.class);
    

    【讨论】:

    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2016-10-13
    相关资源
    最近更新 更多