2009-04-11 22 views
0

我創建一個網站上有一些指的是在頁面的其他地方使用的對象多頁面組件。其中一些組件也在其他頁面中使用,因此我的使用願望包括而不是剪切和粘貼。JSP useBean的範圍,包含頁面組件

的問題是,如果我有相同「的jsp:useBean的」,在頁面的多個報表組件,編譯器給出了錯誤「複製本地變量」。

我如何使用在JSP頁面中的多個組件相同的對象,而在該文件中有一切嗎?

實施例:在主(父)頁:

<jsp:useBean id="fred" class="..." scope="request" /> 

<jsp:directive.include file="myWidget.jsp" /> 

包含頁面,myWidget.jsp,也需要利用 「fred的」 對象的:

<jsp:useBean id="fred" class="..." scope="request" /> 

然而,這會導致編譯失敗,出現「重複的局部變量'fred'」。

這基本上違背了分解成部件的頁面的想法;我不想擁有長達數百行的JSP文件,這些文件只是彼此略有不同!

對於一個組成部分,它是在網站的每個頁面一致的地方是絕對必要的,我已經解決該問題曾與小腳本:

<% 
    { // for scope 
     Object _o1 = request.getAttribute("fred"); 
     if (_o1 !=null && _o1 instanceof MyClass) 
     { 
      // use a deliberately obscure variable name to avoid conflict 
      MyClass _myLocalFred1 = (MyClass) _o1; 

     } 
    } // for scope 
%> 

這工作,但它的醜陋;有幾本書說「永遠不要使用scriptlet」,但scriptlet似乎是變量範圍可以控制的唯一方法,我可以使用名稱而不用擔心它們在頁面的其他地方使用。

一個人怎麼使用jsp:useBean的在include'd文件?

+0

JSP從來沒有被設計用於「widget」風格的編程。 Sun知道這一點,他們已經轉移到JSF。你有沒有考慮過使用JSF而不是純JSP?任何其他的web框架也會做你想做的。 – kazanaki 2009-04-12 21:36:21

回答

0

我結束了使用Struts框架的「瓷磚」的一部分。它提供了組件的隔離,所以它們不會欺騙對方的名稱空間。