2012-02-02 128 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");%> 
相關問題