Inclure un autre fichier JSP

161

J'essaye actuellement d'apprendre JSP. Ma question est, à l'heure actuelle, j'incluais l'en-tête et le pied de page de la page en utilisant:

<%@include file="includes/header.jsp" %>

et

<%@include file="includes/footer.jsp" %>

Mais maintenant, j'ai également séparé le contenu de la page. Ainsi, si l'utilisateur clique sur une page, disent les produits, il faut charger le fichier JSP qui est situé dans: includes/pages/products.jsp Ainsi, le lien vers l'utilisateur est comme: <a href="index.jsp?p=products">Products</a>.

Donc, je dois obtenir la valeur p et afficher la page en fonction de celle-ci.

Voici ce que j'ai fait jusqu'à présent.

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="includes/page_name.jsp" %>

<% 
 }
%>

Alors, comment placer la valeur de la variable «p» à la position de «page_name»?

Ou y a-t-il une autre méthode que je pourrais utiliser?

En PHP, nous pourrions utiliser le include()ou include_once(). Je suis un peu coincé dans cette JSP. :(

Akhilesh B Chandran
la source
1
Pourquoi ne pas coder le nom de page ici? de toute façon, vous vérifiez P, alors vous savez que la page de distination sera p.jsp, donc une raison de se compliquer?
kosa le
Merci d'avoir répondu. C'était pour un exemple. En fait, j'ai subdivisé la page en plusieurs. Par exemple, si j'ai une page Produits dans la zone d'administration, pour ajouter un nouveau produit, éditer un produit, rechercher un produit, afficher un produit, etc. elle est séparée en sous-pages. Donc, coder en dur chaque ligne aurait l'air désagréable. Disons que pour afficher mon nom seulement 10 fois, je pourrais choisir d'imprimer en utilisant une boucle ou d'écrire les 10 lignes. Mais je pense qu'il vaut mieux choisir la boucle. N'est-ce pas? Je pense que cela pourrait être la solution: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

Réponses:

231

Ce que vous faites est une inclusion statique. Une inclusion statique est résolue au moment de la compilation et peut donc ne pas utiliser une valeur de paramètre, qui n'est connue qu'au moment de l'exécution.

Ce dont vous avez besoin est une dynamique, notamment:

<jsp:include page="..." />

Notez que vous devez utiliser JSP EL plutôt que des scriptlets. Il semble également que vous implémentiez un contrôleur central avec index.jsp. Vous devez utiliser un servlet pour le faire à la place et envoyer à la JSP appropriée à partir de ce servlet. Ou mieux, utilisez un framework MVC existant comme Stripes ou Spring MVC.

JB Nizet
la source
1
Merci pour vos suggestions. :) J'ai essayé d'utiliser la balise jsp: include. Mais au moment de l'exécution, cela donne une erreur de fichier introuvable. Détails de l' exception: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. On dirait que le <%= p %>est utilisé tel quel dans le chemin du fichier!
Akhilesh B Chandran
7
N'utilisez pas de scriptlets. Utilisez JSP EL: page = "/ includes / $ {param.p}". Ou essayez avec page = "<% =" / includes / "+ p%>".
JB Nizet
3
Je vous remercie. Je l'ai utilisé comme ça: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />et ça marche maintenant :)
Akhilesh B Chandran
2
Très bonne réponse! J'ai vu ce modèle (contrôleur central dans index.jsp) trop de fois et cela conduit toujours à des problèmes.
Matthias Hryniszak
Cela ne devrait-il pas être le temps de la traduction? Et je pense que vous pouvez toujours utiliser des paramètres avec ça?
Koray Tugay
26

Vous pouvez utiliser des paramètres comme ça

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

et

dans about.jsp, vous pouvez prendre le paramètre

<%String leftAds = request.getParameter("articleId");%>
vitralyoz
la source
18

Vous pouvez utiliser Inclure les directives

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="<%="includes/" + p +".jsp"%>"%>

<% 
 }
%>

ou JSP Inclure l'action

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<jsp:include page="<%="includes/"+p+".jsp"%>"/>

<% 
 }
%>

la directive different is include inclut un fichier pendant la phase de traduction. tandis que l'action d'inclusion JSP inclut un fichier au moment où la page est demandée

Je recommande Spring MVC Framework comme contrôleur pour manipuler les choses. utilisez le modèle d'URL au lieu du paramètre.

exemple:

www.yourwebsite.com/products

au lieu de

www.yourwebsite.com/?p=products

Regardez cette vidéo Spring MVC Framework

Jaymelson Galang
la source
1
la vidéo est protégée .. veuillez la partager au public
AutoMEta
Pouvez-vous vérifier si votre premier exemple fonctionne réellement? Je n'arrive pas à le faire fonctionner.
Jus12
8

Au moment de la traduction de la page, le contenu du fichier donné dans la directive include est «collé» tel quel, à l'endroit où la directive include JSP est utilisée. Ensuite, la page JSP source est convertie en une classe de servlet java. Le fichier inclus peut être une ressource statique ou une page JSP. En général, la directive d'inclusion JSP est utilisée pour inclure des bannières d'en-tête et des pieds de page.

Syntaxe pour inclure un fichier jsp:

<%@ include file="relative url">

Exemple

<%@include file="page_name.jsp" %>
Aravind Cheekkallur
la source
6

1. <a href="index.jsp?p=products">Products</a>lorsque l'utilisateur clique sur le lien Produits, vous pouvez appeler directement products.jsp.

Je veux dire que vous pouvez conserver le nom du fichier JSP comme le paramètre Value.

<%
 if(request.getParameter("p")!=null)
 { 
   String contextPath="includes/";
   String p = request.getParameter("p");
   p=p+".jsp";
   p=contextPath+p;

%>    

<%@include file="<%=p%>" %>

<% 
 }
%>

ou

2. vous pouvez gérer le fichier de ressources externes avec des paires clé et valeur. comme ci-dessous

products : products.jsp

customer : customers.jsp

vous pouvez récupérer par programme le nom du fichier JSP à partir du fichier de propriétés.

de cette façon, vous pouvez facilement changer le nom du fichier JSP

Balaswamy Vaddeman
la source
Je vous remercie. J'utilise la première chose pour le moment. En fait, j'ai un problème avec comment faire cela!
Akhilesh B Chandran
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Cela a-t-il fonctionné de votre côté?
Akhilesh B Chandran
c'est le chemin lié CHÈQUE si le fichier existe dans ur chemin, je suppose ur chemin de contexte manquant (devrait être includes / admin.jsp) .Je n'ont pas simulé Entre scenerio mon côté
Balaswamy Vaddeman
1
J'ai essayé de faire écho à la valeur de "p". Il est: includes/add.jsp. Ensuite , utilisé cela en dérivé comprennent: <%@ include file="includes/add.jsp" %>. Il montre le contenu de la page. Mais si j'utilise cette ligne à la place:, <%@ include file="<%=p%>" %>ça montre une exception!
Akhilesh B Chandran
Salut, j'ai le même problème. Obtenir une erreur File "<%=p%>" not found. Si j'utilise une valeur réelle, cela fonctionne.
Reddy SK
0

Pour une raison que je ne comprends pas encore, après avoir utilisé <%@include file="includes/footer.jsp" %>dans mon index.jsppuis dans les autres fichiers jsp comme register.jspje devais utiliser <%@ include file="footer.jsp"%>. Comme vous le voyez, il n'était plus nécessaire d'utiliser le chemin complet, STS avait stocké mon chemin initial.

Lekakos Theodore
la source