2009-04-11 25 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框架的“瓷砖”的一部分。它提供了组件的隔离,所以它们不会欺骗对方的名称空间。