2012-08-07 75 views
0

我的應用程序以前廣泛使用jsp 2.0自定義標籤。我們更傾向於使用jsp:includes,因爲我們不需要手動將對象設置爲請求範圍。然而,自定義標籤對我們來說有一個主要限制,它不能動態地調用它們。在我們的大小應用程序中,這迫使我們使用jsp:includes代替。Jsp用jsp模仿一個自定義標籤:include?

因此,我們有大量的代碼看起來像這樣:

<c:set var="product" value="${product}" scope="request" /> 
<jsp:include page="${product.name}.jsp" /> 
<c:remove var="product" scope="request"/> 

除了面色難看了容易出錯,所以我想封裝成一個標籤此獲得兩全其美的,自定義標籤在幕後調用一個動態的jsp。我試着叫「包括」自定義標籤是這樣的:

<%@ attribute name="name" rtexprvalue="true" required="true" %> 
<%@ attribute name="value" rtexprvalue="true" required="true" %> 
<%@ attribute name="page" rtexprvalue="true" required="true" type="java.lang.Object" %> 

<c:set var="${name}" value="${value}" scope="request" /> 
<jsp:include page="${page}" /> 
<c:remove var="${name}" scope="request"/> 

但它不工作,因爲C:集不允許在var標記的表達。我該如何做這項工作?我願意在這個標籤中使用scriptlet,只是因爲它值得我們應用程序的價值。

理想的情況下,雖然,我很想能夠寫一個接受的參數數量不受限制,像這樣一個標籤:

<i:include product="${product}" order="${order}" page="${product.name}.jsp"/> 

但我不知道該怎麼做。任何建議都會很棒。順便說一句,這個例子只是爲了演示,所以不要掛上它,它只是我想要穿過的想法。

+0

你是什麼意思「這是不能夠動態地調用它們」? – 2012-08-07 11:27:27

+0

我可以使用一個jsp:include與一個動態生成的路徑值,例如,如果我有3個產品和3個jsp包含,我可以調用 。如果我有3個標籤,我無法做任何事情,比如 user842800 2012-08-07 12:45:13

+0

爲什麼不簡單使用標籤' ',並根據產品標籤中的名稱參數決定標籤必須做什麼(例如'')? – 2012-08-07 12:51:22

回答

0

嗯,我跟小腳本去沒有更好的實現:

<%@ attribute name="page" rtexprvalue="true" required="true" %> 
<%@ attribute name="name" rtexprvalue="true" required="true" %> 
<%@ attribute name="value" rtexprvalue="true" required="true" type="java.lang.Object" %> 

<% request.setAttribute(name, value); %> 
<jsp:include page="${page}" /> 
<% request.removeAttribute(name); %>