2012-02-02 126 views
132

我目前正在尝试学习JSP。我的问题是,目前我用于包括使用页面的页眉和页脚:包含另一个JSP文件

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

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

但现在,我也分开的页面内容。因此,如果用户点击页面上的产品,则需要加载位于以下位置的JSP文件:includes/pages/products.jsp 因此,与用户的链接如下所示:<a href="index.jsp?p=products">Products</a>

因此,我必须得到p值并根据它显示页面。

以下是我迄今为止所做的。

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

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

<% 
} 
%> 

那么,如何将变量“p”的值放在“page_name”的位置?

或者,有没有其他方法可以使用?

在PHP中,我们可以使用include()include_once()。我有点卡在这个JSP中。 :(

+1

为什么不硬编码那里的页面名?无论如何你正在检查P,那么你知道distination页面将是p.jsp,所以任何理由复杂化? – kosa 2012-02-02 09:52:08

+0

感谢您的回复。这是一个例子。实际上,我已将页面细分为几个。例如,如果我在管理区域中有一个产品页面,可以添加新产品,编辑产品,搜索产品,查看产品等等,它将分为多个子页面。因此,硬编码每条线看起来都很糟糕。说,要显示我的名字只有10次,我可以选择使用循环打印或写下10行。但我认为,选择循环更好。不是吗?我认为,这可能是解决方案:http://stackoverflow.com/questions/482788/how-to-include-a-runtime-file-for-include-in-jsp – 2012-02-02 10:03:24

回答

194

的名称是什么,你正在做的是静态包含。静态包含在编译时被解析,因此可能不使用只在执行时知道的参数值。

你需要的是一个动态的包括:

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

请注意,您应该使用JSP EL,而不是小脚本。它似乎也正在用index.jsp实现一个中央控制器。你应该使用一个servlet来完成这个任务,并且从这个servlet分派给适当的JSP。或者更好的,使用Stripes或Spring MVC等现有的MVC框架。

+1

感谢您的建议。 :) 我曾尝试使用jsp:include标记。但是在运行时,它会给出一个找不到文件的错误。异常详细信息:'java.io.FileNotFoundException:/ includes/<%= p%> .jsp'。看起来像'<%= p %>'是在文件路径中使用的! – 2012-02-02 10:25:01

+7

不要使用scriptlets。使用JSP EL:page =“/ includes/$ {param.p}”。或者尝试使用page =“<%=”/ includes /“+ p%>”。 – 2012-02-02 11:21:04

+3

谢谢。我这样使用它:'”/>'它现在正在工作:) – 2012-02-02 11:34:23

4

1. <a href="index.jsp?p=products">Products</a>当产品链接用户点击,就可以直接调用products.jsp。

我的意思是ü可以维持JSP文件相同的参数值的名称。

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

%>  

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

<% 
} 
%> 

2.you可以保持与关键的外部资源文件,值对。 像下面

products : products.jsp

customer : customers.jsp

您可以通过编程检索性的判定文件JSP文件的名称。

这样你可以很容易地改变JSP文件

+0

谢谢。目前我正在使用第一件事。其实,我在如何做到这一点上存在问题! – 2012-02-02 10:29:40

+0

我编辑了答案 – 2012-02-02 10:42:18

+0

'org.apache.jasper.JasperException:/admin.jsp(239,44)PWC6117:未找到文件“/ <%=p%>”。这有效吗? – 2012-02-02 10:56:48

13

您可以使用包含指令

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

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

<% 
} 
%> 

JSP include动作

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

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

<% 
} 
%> 

不同的是包括指令包含在翻译阶段的文件。 而JSP包含操作包含在请求页面时的文件

我推荐Spring MVC Framework作为控制器来操纵事物。 使用网址格式代替参数。

例如:

www.yourwebsite.com/products 

,而不是

www.yourwebsite.com/?p=products 

关注此视频Spring MVC Framework

+1

视频受保护..请将其分享给公众 – AutoMEta 2013-06-27 18:38:35

+0

您可以检查您的第一个例子是否真的有效吗?我似乎无法得到它的工作。 – Jus12 2013-11-14 20:17:19

5

在页面转换期间,在include指令给出的文件的内容被 '贴' 为它是在使用JSP include指令的地方。然后将源JSP页面转换为java servlet类。包含的文件可以是静态资源或JSP页面。通常,JSP include指令用于包含页眉横幅和页脚。

语法包括JSP文件:

<%@ include file="relative url"> 

<%@include file="page_name.jsp" %> 
13

您可以使用参数,如在about.jsp您可以在

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

采取参数呃

<%String leftAds = request.getParameter("articleId");%> 
相关问题