Je travaille sur une exigence d'afficher un document PDF sur la page. Ce document est extrait d'un service principal sous la forme d'un tableau d'octets. Je convertis ce tableau d'octets en flux de sortie, puis je l'écris dans la réponse dans un servlet Sling. Le servlet obtient le tableau d'octets d'un service OSGi. Je me demande s'il est possible pour moi d'utiliser un modèle Sling au lieu d'un Sling Servlet. Le modèle Sling appellerait le service OSGi pour obtenir le tableau d'octets, mais je ne suis pas sûr des étapes suivantes. J'ai injecté l'objet de réponse dans Sling Model en utilisant
@SlingObject
private SlingHttpServletResponse response;
Mais ça ne fera pas l'affaire. Toute orientation serait utile.
Merci d'avance
Avertissement
Sans connaître vos besoins spécifiques, je recommanderais d'utiliser un servlet au lieu d'utiliser un modèle Sling. Un modèle Sling est censé être une représentation d'une ressource JCR dans le référentiel pour ne pas être utilisé comme servlet.
Un modèle Sling a un «cycle de vie» différent d'un servlet. Alors qu'un servlet est instancié en tant que service / composant OSGi (qui est un singleton dans la plupart des cas), un modèle Sling peut être instancié plusieurs fois au cours d'une seule demande. Soyez donc conscient de cette différence et des conséquences.
Cela dit, vous avez deux options pour écrire le PDF dans la réponse avec un modèle Sling:
Exemple pour 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 ...]
}
}
La méthode annotée avec @PostConstruct
est appelée après l'injection de tous les champs annotés, afin que vous puissiez exécuter votre code d'initialisation.
Exemple pour 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 ...]
}
}
De toute évidence, avec le deuxième exemple, vous devrez avoir une sorte de code qui instancie le modèle et les appels writePDFtoResponse()
.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots