Incluir outro arquivo JSP

161

Atualmente, estou tentando aprender JSP. Minha pergunta é que, atualmente, eu costumava incluir o cabeçalho e rodapé da página usando:

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

e

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

Mas agora, eu também separei o conteúdo da página. Assim, se o usuário clica em uma página, dizem produtos, tem que carregar o arquivo JSP que está situado em: includes/pages/products.jsp Então, o link para o usuário é semelhante: <a href="index.jsp?p=products">Products</a>.

Então, eu tenho que obter o valor de p e exibir a página com base nele.

A seguir, é o que eu fiz até agora.

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

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

<% 
 }
%>

Então, como coloco o valor da variável "p" na posição de "nome_página"?

Ou existe algum outro método que eu possa usar?

No PHP, poderíamos usar o include()ou include_once(). Estou um pouco preso neste JSP. :(

Akhilesh B Chandran
fonte
1
Por que não codificar o nome da página lá? de qualquer maneira que você está verificando P, então você sabe que a página de distinção será p.jsp, então há algum motivo para complicar?
Kosa
Obrigado por responder. Foi por exemplo. Na verdade, subdividi a página em várias. Por exemplo, se eu tiver uma página Produtos na área de administração, para adicionar um novo produto, editar um produto, pesquisar um produto, visualizar um produto, etc., ela será separada em subpáginas. Portanto, codificar cada linha seria desagradável. Digamos, para exibir meu nome apenas 10 vezes, eu poderia optar por imprimir usando um loop ou anotar as 10 linhas. Mas acho que escolher o loop é melhor. Não é? Eu acho que, esta pode ser a solução: stackoverflow.com/questions/482788/...
Akhilesh B Chandran

Respostas:

231

O que você está fazendo é uma inclusão estática. Uma inclusão estática é resolvida no tempo de compilação e, portanto, não pode usar um valor de parâmetro, conhecido apenas no tempo de execução.

O que você precisa é de uma dinâmica:

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

Observe que você deve usar o JSP EL em vez de scriptlets. Parece também que você está implementando um controlador central com index.jsp. Você deve usar um servlet para fazer isso e despachar para o JSP apropriado a partir desse servlet. Ou melhor, use uma estrutura MVC existente como Stripes ou Spring MVC.

JB Nizet
fonte
1
Obrigado por suas sugestões. :) Eu tentei usar a tag jsp: include. Mas em tempo de execução, ele fornece um erro de arquivo não encontrado. Detalhes da exceção: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Parece que o <%= p %>é usado como no caminho do arquivo!
Akhilesh B Chandran
7
Não use scriptlets. Use JSP EL: page = "/ includes / $ {param.p}". Ou tente com a página = "<% =" / includes / "+ p%>".
JB Nizet
3
Obrigado. Usei-o assim: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />e ele está trabalhando agora :)
Akhilesh B Chandran
2
Resposta muito boa! Eu já vi esse padrão (controlador central no index.jsp) muitas vezes e sempre leva a problemas.
Matthias Hryniszak
Isso não deveria ser tempo de tradução? E acho que você ainda pode usar parâmetros com isso?
precisa
26

Você pode usar parâmetros como esse

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

e

em about.jsp você pode pegar o parâmetro

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

Você pode usar Incluir Diretivas

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

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

<% 
 }
%>

ou JSP Incluir Ação

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

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

<% 
 }
%>

a diretiva diferente é incluir inclui um arquivo durante a fase de tradução. enquanto JSP Include Action inclui um arquivo no momento em que a página é solicitada

Eu recomendo o Spring MVC Framework como seu controlador para manipular as coisas. use padrão de URL em vez de parâmetro.

exemplo:

www.yourwebsite.com/products

ao invés de

www.yourwebsite.com/?p=products

Assista a este vídeo Spring MVC Framework

Jaymelson Galang
fonte
1
o vídeo é protegido share ..por favor para público
AutoMEta
Você pode verificar se o seu primeiro exemplo realmente funciona? Não consigo fazê-lo funcionar.
Jus12
8

No momento da conversão da página, o conteúdo do arquivo fornecido na diretiva de inclusão é 'colado' como está, no local em que a diretiva de inclusão JSP é usada. Em seguida, a página JSP de origem é convertida em uma classe de servlet java. O arquivo incluído pode ser um recurso estático ou uma página JSP. Geralmente, a diretiva JSP include é usada para incluir banners e rodapés de cabeçalho.

Sintaxe para incluir um arquivo jsp:

<%@ include file="relative url">

Exemplo

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

1. <a href="index.jsp?p=products">Products</a>quando o usuário clica no link Produtos, você pode chamar diretamente products.jsp.

Quero dizer, você pode manter o nome do arquivo JSP igual ao parâmetro 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.Você pode manter um arquivo de recurso externo com pares de chaves e valores. como abaixo

products : products.jsp

customer : customers.jsp

você pode recuperar programaticamente o nome do arquivo JSP do arquivo de propriedades.

Dessa forma, você pode alterar facilmente o nome do arquivo JSP

Balaswamy Vaddeman
fonte
Obrigado. Estou usando a primeira coisa no momento. Na verdade, estou tendo problemas com o modo de fazer isso!
Akhilesh B Chandran
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Isso funcionou ao seu lado?
Akhilesh B Chandran
este é cheque questão relacionada caminho se o arquivo existe no caminho ur, eu acho que ur caminho do contexto em falta (deve ser inclui / admin.jsp) .Eu não ter simulado Entre scenerio meu lado
Balaswamy Vaddeman
1
Eu tentei ecoar o valor de "p". É: includes/add.jsp. Em seguida, este utilizado no derivado incluem: <%@ include file="includes/add.jsp" %>. Mostra o conteúdo da página. Mas se eu usar esta linha:: <%@ include file="<%=p%>" %>, ela mostra uma exceção!
Akhilesh B Chandran
Oi, eu tenho o mesmo problema. Obtendo erro File "<%=p%>" not found. Se vou usar valor real, está funcionando.
Reddy SK
0

Por uma razão que ainda não entendi, depois que usei <%@include file="includes/footer.jsp" %>no meu index.jspthen nos outros arquivos jsp como register.jspeu tinha que usar <%@ include file="footer.jsp"%>. Como você vê, não havia mais necessidade de usar o caminho completo, o STS armazenou meu caminho inicial.

Lekakos Theodore
fonte