【问题标题】:jsp useBean scope in included page components包含的页面组件中的 jsp useBean 范围
【发布时间】:2010-10-18 22:25:49
【问题描述】:

我正在创建一个站点,其中有许多页面组件引用页面中其他地方使用的对象。其中一些组件也用于其他页面,因此我希望使用包括而不是剪切和粘贴。

问题是,如果我在页面的多个组件中有相同的“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 似乎是唯一可以控制变量范围的方法,而且我可以使用名称而不必担心它们在页面的其他地方使用。

如何在包含的文件中使用 jsp:useBean?

【问题讨论】:

  • JSP 从未设计用于“小部件”风格的编程。 Sun 知道这一点,因此他们已转向 JSF。您是否考虑过使用 JSF 代替纯 JSP?任何其他 Web 框架也可以满足您的需求。

标签: jsp scope components


【解决方案1】:

我最终使用了 Struts 框架的“Tiles”部分。它提供了组件的隔离,因此它们不会污染彼此的命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2016-02-19
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多