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. :(
Respostas:
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:
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.
fonte
java.io.FileNotFoundException: /includes/<%= p %>.jsp
. Parece que o<%= p %>
é usado como no caminho do arquivo!<jsp:include page="<%= "includes/" + p + ".jsp" %>" />
e ele está trabalhando agora :)Você pode usar parâmetros como esse
e
em about.jsp você pode pegar o parâmetro
fonte
Você pode usar Incluir Diretivas
ou JSP Incluir Ação
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:
ao invés de
Assista a este vídeo Spring MVC Framework
fonte
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:
Exemplo
fonte
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.
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
fonte
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found
. Isso funcionou ao seu lado?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!File "<%=p%>" not found
. Se vou usar valor real, está funcionando.Por uma razão que ainda não entendi, depois que usei
<%@include file="includes/footer.jsp" %>
no meuindex.jsp
then nos outros arquivos jsp comoregister.jsp
eu 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.fonte