Products。因此,我必须获取 p 值并根据......" /> Products。因此,我必须获取 p 值并根据......"> Products。因此,我必须获取 p 值并根据......" />
ChatGPT解决这个技术问题 Extra ChatGPT

包含另一个 JSP 文件

jsp

我目前正在尝试学习 JSP。我的问题是,目前我曾经使用以下方法包含页面的页眉和页脚:

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

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

但是现在,我也将页面内容分开了。因此,如果用户点击一个页面,比如产品,它必须加载位于:includes/pages/products.jsp 的 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 中。 :(

为什么不在那里硬编码页面名称?无论如何,您正在检查 P,那么您知道区分页面将是 p.jsp,所以有什么复杂的理由吗?
感谢回复。这是一个例子。实际上,我已将页面细分为几个。例如,如果我在管理区域有一个产品页面,添加新产品、编辑产品、搜索产品、查看产品等。它分为子页面。因此,对每一行进行硬编码看起来很讨厌。假设我的名字只显示 10 次,我可以选择使用循环打印或写下 10 行。但我认为,选择循环更好。不是吗?我认为,这可能是解决方案:stackoverflow.com/questions/482788/…

M
Marvo

你正在做的是一个静态包含。静态包含在编译时解析,因此可能不使用仅在执行时才知道的参数值。

您需要的是动态包括:

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

请注意,您应该使用 JSP EL 而不是 scriptlet。您似乎也在使用 index.jsp 实现中央控制器。您应该使用 servlet 来代替,并从该 servlet 分派到适当的 JSP。或者更好的是,使用现有的 MVC 框架,如 Stripes 或 Spring MVC。


感谢您的建议。 :) 我尝试过使用 jsp:include 标记。但在运行时,它会给出一个文件未找到错误。异常详情:java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp。看起来像在文件路径中使用了 <%= p %>
不要使用小脚本。使用 JSP EL:page="/includes/${param.p}"。或者尝试使用 page="<%= "/includes/" + p %>"。
谢谢你。我像这样使用它:<jsp:include page="<%= "includes/" + p + ".jsp" %>" />,它现在可以工作了:)
很好的答案!我已经多次看到这种模式(index.jsp 中的中央控制器),它总是会带来麻烦。
那不应该是翻译时间吗?而且我认为您仍然可以使用参数吗?
v
vitralyoz

你可以使用这样的参数

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

在 about.jsp 你可以把参数

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

J
Jaymelson Galang

您可以使用包含指令

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

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

<% 
 }
%>

或 JSP 包含动作

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

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

<% 
 }
%>

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

我推荐 Spring MVC Framework 作为你的控制器来操作。使用 url 模式而不是参数。

例子:

www.yourwebsite.com/products

代替

www.yourwebsite.com/?p=products

观看此视频Spring MVC Framework


视频受保护..请公开分享
你能检查你的第一个例子是否真的有效吗?我似乎无法让它工作。
视频怎么了?
T
Tom11

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

包含 jsp 文件的语法:

<%@ include file="relative url">

例子

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

B
Balaswamy Vaddeman

1.<a href="index.jsp?p=products">Products</a>当用户点击Products链接时,可以直接调用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.您可以使用键值对维护外部资源文件。像下面

products : products.jsp

customer : customers.jsp

您可以以编程方式从属性文件中检索 JSP 文件的名称。

这样您就可以轻松更改 JSP 文件的名称


谢谢你。我目前正在使用第一件事。实际上,我遇到了如何做到这一点的问题!
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found。这对你有用吗?
这是与路径相关的问题,检查您的路径中是否存在文件,我猜您缺少上下文路径(应该是 include/admin.jsp)。我没有模拟我身边的场景
我试过呼应“p”的值。它是:includes/add.jsp。然后在包含导数中使用它:<%@ include file="includes/add.jsp" %>。它显示页面内容。但如果我改用这一行:<%@ include file="<%=p%>" %>,它会显示异常!
你好,我有同样的问题。收到错误 File "<%=p%>" not found。如果我将使用实际价值,它就会起作用。
S
Simon.S.A.

由于我还不明白的原因,在我的 index.jsp 中使用了 <%@include file="includes/footer.jsp" %> 之后,在其他 jsp 文件(如 register.jsp)中我不得不使用 <%@ include file="footer.jsp"%>。如您所见,不再需要使用完整路径,STS 已经存储了我的初始路径。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅