jsp useBean область действия во включенных компонентах страницы - PullRequest
0 голосов
/ 11 апреля 2009

Я создаю сайт, на котором есть много компонентов страницы, которые ссылаются на объекты, которые используются в других местах на странице. Некоторые из этих компонентов используются и на других страницах, поэтому мое желание использовать включает в себя, а не вырезать и вставить.

Проблема в том, что, если у меня есть идентичные операторы "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
%>

Это работает, но уродливо; в нескольких книгах написано: «Никогда не используйте скриптлеты», но скриптлеты, похоже, являются единственным методом, в котором можно управлять областью действия переменной, и я могу использовать имена, не беспокоясь о том, что они используются в других местах страницы.

Как использовать jsp: useBean во включаемом файле?

1 Ответ

0 голосов
/ 01 июня 2009

Я закончил тем, что использовал «Tiles» часть структуры Struts. Он обеспечивает изоляцию компонентов, чтобы они не мешали пространству имен друг друга.

...