4 votes

Création de modèles JSP (vues) dynamiquement à partir de la base de données

Je développe une application en utilisant Java et Spring MVC. Comme d'habitude, j'ai stocké un fichier JSP dans le dossier /WEB-INF/view/ qui sert de vue pour toutes les demandes.

Normalement, nous avons un JSP codé en dur qui contient également des codes pour traiter le modèle (balises et EL). Les choses fonctionnent bien jusqu'à ce point.

Maintenant, au lieu de coder en dur la JSP, je veux remplir ce fichier JSP dynamiquement à partir de la base de données. Ainsi, l'utilisateur peut télécharger et sélectionner différents modèles/thèmes/présentations pour afficher ses pages.

Voici le code pour expliquer ce que j'essaie de faire (je sais que ce n'est pas la bonne méthode mais c'est uniquement à titre d'illustration).

/WEB-INF/views/index.jsp

<%@ page import="com.example.domain.Template" %>
<%@ page import="com.example.dao.TemplateStore" %>

<!-- Following code is supposed to return complete JSP template from the database as uploaded by the user. -->

<%= TemplateStore.getUserTemplate("userTemplate") %>

J'ai cherché ce sujet sur le web mais je n'ai rien trouvé.

Toute aide sur la manière d'y parvenir serait très appréciée.

Merci d'avance.

IMPORTANT : J'ai posé cette question il y a quelques jours mais elle a été marquée comme "hors sujet" par certains membres. Je n'ai pas encore compris en quoi cette question était hors sujet. https://stackoverflow.com/questions/18026092/creating-content-of-jsp-views-in-web-inf-views-dynamically-from-the-database .

3voto

Costi Ciudatu Points 13020

Si les modèles de vues doivent être récupérés dynamiquement à partir d'une base de données, il ne faut pas penser aux JSP. Les JSP sont compilés en classes de servlets et il y a peu de support pour le faire autrement que de la manière standard (fichiers statiques quelque part sous le Root de votre webapp).

Par conséquent, envisagez simplement de changer la technologie des vues (au moins pour la partie dynamique) pour une bibliothèque de templating à usage général comme Vélocité o Freemarker . Cela s'accompagne d'un avantage en termes de sécurité, car il y a moins de risques de casser un modèle que du code JSP.

Vous pourriez même prendre en charge plusieurs technologies d'affichage (peut-être tout ce que Spring MVC prend en charge d'emblée, à l'exception de JSP) et permettre à vos utilisateurs de choisir le type de modèle lors du téléchargement.

Vous pouvez alors écrire un résolveur de vue personnalisé qui déléguerait au résolveur standard approprié (Velocity, Freemarker, XSLT, peu importe...) avec le modèle sélectionné par l'utilisateur.

Cependant, si JSP est une exigence stricte, je pense qu'une solution de contournement laide pour JSP (qui devrait fonctionner dans n'importe quel conteneur de servlet) pourrait être de récupérer le contenu de la base de données et de créer un fichier réel (comme WEB-INF/templates/${primarky-key}.jsp ) sous votre racine de webapp exploré, puis RequestDispatcher.forward() à elle.

0voto

Scary Wombat Points 12031

Vous pouvez ou non faire cela avec JSP, mais vous pouvez certainement compiler du code Java en mémoire et l'appeler ensuite.

http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm

Bien sûr, passer de JSP à Servlet ne serait qu'une étape supplémentaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X