Главная » Java, Web » Взаимодействие ярлыков

0

может быть осуществлено путем создания объектов, доступных разным ярлыкам. Объекты, доступные для разных ярлыков, могут быть созданы двумя способами. Первый способ подразумевает создание объектов, обладающих именами, причем эти объекты должны храниться в контексте страницы. Эти объекты доступны для JSP-страниц и для обработчиков ярлыков. Для обращения к объекту, созданному одним из ярлыков, из другого ярлыка используется метод pageContext. getAttribute (name, scope). Второй метод состоит в том, что объект создается в обработчике родительского ярлыка, в котором имеются другие ярлыки, для обработчиков которых созданный объект автоматически доступен. Такой способ разделения объектов уменьшает риск появления конфликтов имен объектов. Чтобы обратиться к объекту, созданному родительским ярлыком, обработчик ярлыка должен определить сам родительский ярлык при помощи метода TagSupport.findAncestorWithClass(from, class) ИЛИ метода TagSupport.getParent. После того как родительский ярлык определен, обработчик ярлыка имеет возможность получить любой статический или динамический объект. В примере рассмотрены оба метода разделения объектов: public class QueryTag extends BodyTagSupport { private String connectionld;

public int doStartTagO throws JspException { String cid = getConnection(); if (cid != null) {

// есть идентификатор id, используем его connect ion =(Connect ion)pageContext.

getAttribute(cid); } else {

ConnectionTag ancestorTag = (Connect ionTag)findAncestorWithClass(this, ConnectionTag.class); if (ancestorTag == null) { throw new JspTagException("Запрос без атрибута whatever должен быть

помещен внутрь ярлыка yarlyk:whatever.");

}

connection = ancestorTag.getConnection();

}

}

}

Фрагмент описания ярлыка для этого примера:

<yarlyk:whatever id="con01" ….> … </yarlyk:whatever> <yarlyk:zapros id="balances" connection="con01"> SELECT account, balance FROM acct_table where customer_number = <%= request.getCustno ()%> </yarlyk:zapros>

<yarlyk:wahtever …>

<sss:zapros id="balances"> SELECT account, balance FROM acct_table where customer_number = <%= request.getCustno ()%> </sss:zapros> </yarlyk:wahtever>

В файле TLD следует указать, что атрибут whatever не является обязательным:

<tag>

<attribute> <name>whatever</name> <required>false</required> </attribute> </tag>

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии