我正在创建一个网站,其中有许多页面组件引用页面中其他位置使用的对象。其中一些组件也用于其他页面,因此我的使用愿望包括而不是剪切和粘贴。
问题是如果我在页面的多个组件中有相同的“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文件,这些文件只是彼此略有不同!
对于一个组件,在网站的每个页面上保持一致是绝对必要的,我已经使用scriptlet解决了这个问题:
<%
{ // 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似乎是唯一可以控制变量范围的方法,我可以使用名称而不用担心它们在页面的其他地方使用过。
如何在include'd文件中使用jsp:useBean?
答案 0 :(得分:0)
我最终使用了Struts框架的“Tiles”部分。它提供了组件的隔离,因此它们不会影响彼此的命名空间。