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. :(
Réponses:
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:
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.
la source
java.io.FileNotFoundException: /includes/<%= p %>.jsp
. On dirait que le<%= p %>
est utilisé tel quel dans le chemin du fichier!<jsp:include page="<%= "includes/" + p + ".jsp" %>" />
et ça marche maintenant :)Vous pouvez utiliser des paramètres comme ça
et
dans about.jsp, vous pouvez prendre le paramètre
la source
Vous pouvez utiliser Inclure les directives
ou JSP Inclure l'action
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:
au lieu de
Regardez cette vidéo Spring MVC Framework
la source
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:
Exemple
la source
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.
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
la source
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found
. Cela a-t-il fonctionné de votre côté?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!File "<%=p%>" not found
. Si j'utilise une valeur réelle, cela fonctionne.Pour une raison que je ne comprends pas encore, après avoir utilisé
<%@include file="includes/footer.jsp" %>
dans monindex.jsp
puis dans les autres fichiers jsp commeregister.jsp
je 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.la source