Отказ от ответственности
Не зная ваших конкретных требований, я бы порекомендовал использовать сервлет вместо использования Sling Model.Предполагается, что Sling Model является представлением ресурса JCR в репозитории, и его не следует использовать как сервлет.
Модель Sling имеет «жизненный цикл», отличный от сервлета.В то время как сервлет создается как сервис / компонент OSGi (который в большинстве случаев является одноэлементным), модель Sling может быть создана несколько раз за один запрос.Так что помните об этой разнице и последствиях.
Тем не менее, у вас есть два варианта записать PDF-файл в ответ с моделью стропа:
- Во время инициализации стропаМодель
- Когда вызывается определенный метод
Пример для 1:
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
@SlingObject
private SlingHttpServletResponse response;
@OSGiService
private PDFService pdfService;
@PostConstruct
public void init() {
response.setContentType("application/pdf");
[... code to write PDF to response ...]
}
}
Вызывается метод, отмеченный @PostConstruct
после того, как все аннотированные поля введены, так что вы можете запустить свой код инициализации.
Пример для 2:
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
@SlingObject
private SlingHttpServletResponse response;
@OSGiService
private PDFService pdfService;
public void writePDFtoResponse() {
response.setContentType("application/pdf");
[... code to write PDF to response ...]
}
}
Очевидно, со вторым примером у вас будетиметь некоторый код, который создает экземпляр модели и вызывает writePDFtoResponse()
.