АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Struts Nested Tags

Читайте также:
  1. Org.apache.struts.action.ActionMapping.
  2. Struts Bean Tags
  3. Struts Logic Tags
  4. Метод вложенных циклов (NLJ – Nested Loop Join)

Данная библиотека тегов расширяет возможности тегов всех предыдущих библиотек так, что позволяет определить, в контексте какого nested-тега находится данный тег, тем самым позволяя избежать вызова лишних методов.

Пусть, например, дана страница редактирования объекта класса Company, который содержит как поле объект класса Address со своими свойствами.

<%@ page contentType="text/html;charset=UTF-8"

language="java" %>

<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>

<body>

<html:form action="company.do">

Company name:

<html:text property="company.name" size="60" />

<br>

Company address:

<br>

City:

<html:text property=

"company.address.city" size="60" />

<br>

Street:

<html:text property=

"company.address.street" size="60" />

<br>

<html:submit/>

</html:form>

</body>

</html:html>

Здесь можно заметить, что обращение к методу getCompany() формы происходит каждый раз. Также неизбежен и повторный вызов метода getAddress() класса Company.

С использованием nested-тегов данная JSP будет выглядеть как:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib uri="/tags/struts-html" prefix="html" %>

<%@ taglib uri="/tags/struts-nested" prefix="nested" %>

<html:html>

<body>

<html:form action="company.do">

<nested:nest property="company"/>

Company name:

<html:text property="name" size="60" />

<br>

Company address:

<br>

<nested:nest property="address">

City:

<html:text property="city" size="60" />

<br>

Street:

<html:text property="street" size="60" />

<br>

</nested:nest>

</nested:nest>

<html:submit/>

</html:form>

</body>

</html:html>

С помощью тега nest устанавливается контекст одного из объектов и далее, используя nested-теги, работа ведется именно с объектом, в котором находится текущий nested-тег. Таким образом, с помощью nested-тегов исчезает необходимость повторного вызова методов для получения доступа к объектам, которые уже были доступны ранее.

 

 
Приложение 7

ЖУРНАЛ СООБЩЕНИЙ (LOGGER)

В процессе функционирования сложных приложений необходимо вести журнал сообщений и ошибок, чтобы была возможность отследить время входа и выхода пользователя из системы, возникновение исключительных ситуаций и т.д. Существуют различные API регистрации сообщений и ошибок. В практическом программировании для этих целей применяется API Log4j, разработанный в рамках проекта Jakarta Apache.

API Log4j – это инструмент для формирования журнала сообщений (отладочных, информационных, сообщений об ошибках). API Log4j можно загрузить по адресу: http://logging.apache.org/log4j/. Перед использованием необходимо зарегистрировать загруженную библиотеку log4j-1.2.13.jar
в приложении.

Log4j состоит из трех элементов:

· регистрирующего (logger);

· направляющего вывод (appender);

· форматирующего (layout).

Таким образом logger регистрирует и направляет вывод события в пункт назначения, определяемый элементом appender, в формате, заданном элементом layout.

В стандартной библиотеке java.util.logging также существует возмож­ность журналирования событий. Однако функциональность классов этого пакета несколько уже, чем у классов проекта Log4j, поэтому профессиональные программисты предпочитают использовать последний.

Logger

Основным элементом API регистрации событий и ошибок является регистра­тор Logger, который управляет регистрацией сообщений. Вывод регистратора может быть направлен на консоль, в файл, базу данных, GUI-компонент или сокет. Это компонент приложения, принимающий и выполняющий запросы на запись в регистрационный журнал.

Каждый класс приложения может иметь свой собственный logger или быть прикреплен к общему для всего приложения. Регистраторы образуют иерархию, как и пакеты Java. Регистратор может быть создан или получен с помощью ста­тического метода getLogger(String name), где name – имя пакета. В вершине иерархии находится корневой регистратор. Он всегда существует и у него нет имени. Он может быть получен статическим методом getRootLogger().

У каждого регистратора есть уровень сообщения по возрастанию (TRACE, DEBUG, INFO, WARN, ERROR, FATAL), который управляет выводом сообщений. Для вывода сообщений конкретного уровня используются методы debug(), info(), warn(), error(), fatal(). Чтобы вывести информацию о возник­шем исключении в качестве второго параметра, в вышеперечисленные методы нужно передать объект класса, производного от Throwable. Для вывода сообщения необходимо, чтобы уровень выводимого сообщения был не ниже, чем уровень регистратора (TRACE < DEBUG < INFO < WARN < ERROR < FATAL), т. е. если уровень регистратора INFO, то вызов logger.debug(“message”) не даст никакого эффекта, т. к. DEBUG < INFO. Уровень регистратора можно указать с помощью метода setLevel(Level level), который принимает объект класса Level, содержащий одноименные константы для каждого уровня. Если уровень регистратора не указывается, то наследуется уровень от его родителя. Уровень корневого регистратора DEBUG.

Существуют следующие методы для вывода сообщений:

log(Priority priority, Object message, Throwable t) –выводит сообщения указанного уровня с информацией об исключительной ситуации t.

log(Priority priority, Object message) –выводит сообщения указанного уровня.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)