ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Библиотеки тегов StrutsStruts Bean Tags
Получает значение для указанного cookie. <p>Display the properties of our current session ID cookie (if there is one):</p>
<bean:cookie id="sess" name="JSESSIONID" value="JSESSIONID-IS-UNDEFINED"/>
Создает переменную доступную по значению id в одной из областей видимости согласно атрибуту toScope (по умолчанию page scope) и назначает ей значение атрибута value, либо Java bean по ключу из атрибута name или его свойство по aтрибуту property. <bean:define id="test1_boolean" name="test1" property="booleanProperty" toScope=”session”/> <bean:define id="test1_double" name="test1" property="doubleProperty"/> <bean:define id="test1_float" name="test1" property="floatProperty"/> <bean:define id="test1_int" name="test1" property="intProperty"/> <bean:define id="test1_long" name="test1" property="longProperty"/> <bean:define id="test1_short" name="test1" property="shortProperty"/> <bean:define id="test1_string" name="test1" property="stringProperty"/> <bean:define id="test1_value" value="ABCDE"/>
Получает значение соответствующего заголовка запроса. Display the values of the headers included in this request.<br><br> <% java.util.Enumeration names = ((HttpServletRequest) request).getHeaderNames(); %>
<table border="1"> <tr> <th>Header Name</th> <th>Header Value</th> </tr> <% while (names.hasMoreElements()) { String name = (String) names.nextElement(); %> <bean:header id="head" name="<%= name %>"/> <tr> <td><%= name %></td> <td><%= head %></td> </tr> <% } %>
Включает в ответ данные с указанного источника. Данные хранятся в области видимости page под значением атрибута id. <bean:include id="index" page="/index.jsp"/>
Получает локализированное сообщение для указанного ключа из файла ресурсов.
Получает значение из контекста страницы.
Получает значение указанного параметра из запроса. <bean:parameter id="param1" name="param1"/>
Получает значение указанного ресурса Web-приложения. <bean:resource id="webxml" name="/WEB-INF/web.xml"/>
Получает ссылку на массив или коллекцию и создает новый объект типа java.lang.Integer со значением, равным размеру массива или коллекции. <bean:size id="dataSize" collection="<%= data %>"/>
Получает значение указанного внутреннего конфигурационного объекта Struts.
Показывает значение указанного атрибута указанного бина. Struts Html Tags
Представляют стандартные html-элементы.
Отображает множество подготовленных сообщений об ошибках.
Представляет JavaScript-валидацию, основанную на наборе правил для данной формы, описанных в конфигурационном файле на сервере.
Отображает множество подготовленных сообщений. <% ActionMessages messages = new ActionMessages(); messages.add("property1", new ActionMessage("property1message1")); messages.add("property2", new ActionMessage("property2message1")); messages.add("property2", new ActionMessage("property2message2")); messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("globalMessage")); request.setAttribute(Action.MESSAGE_KEY, messages); %> … <html:messages property="property1" message="true" id="msg" header="messages.header" footer="messages.footer"> <tr><td><%= pageContext.getAttribute("msg") %></td></tr> </html:messages>
Представляет собой html-элемент select c указанным в option элементом списка. С помощью optionsCollection можно задать массив или коллекцию, на основе которой строятся элементы списка. <html:select property="singleSelect" size="10"> <html:option value="Single 0">Single 0 </html:option> <html:option value="Single 1">Single 1 </html:option> <html:option value="Single 2">Single 2 </html:option> <html:option value="Single 3">Single 3 </html:option> <html:option value="Single 4">Single 4 </html:option> <html:option value="Single 5">Single 5 </html:option> <html:option value="Single 6">Single 6 </html:option> <html:option value="Single 7">Single 7 </html:option> <html:option value="Single 8">Single 8 </html:option> <html:option value="Single 9">Single 9 </html:option> </html:select> Struts Logic Tags
Тело данного тега выполняется, только если указанное значение равно (не равно) null или пусто. <logic:empty name="bean" property="nullProperty"> empty </logic:empty> <logic:notEmpty name="bean" property="nullProperty"> notEmpty </logic:notEmpty>
Тело тега выполняется, если совпадают/не совпадают указанные в теге значения.
Выполняет переход по указанному адресу URL.
Тело тега выполняется, если первое указанное значение меньше (больше), чем второе значение, или равно ему.
Тело тега выполняется, если первое указанное значение меньше (больше), чем второе значение.
Повторяет тело тега для каждого элемента из указанной коллекции. <% { java.util.ArrayList list = new java.util.ArrayList(); list.add("First"); list.add("Second"); list.add("Third"); list.add("Fourth"); list.add("Fifth"); pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE);
int intArray[] = new int[] { 0, 10, 20, 30, 40 }; pageContext.setAttribute("intArray", intArray, PageContext.PAGE_SCOPE); }%> … <h3>Test 1 - Iterate Over A String Array [0..4]</h3>
<ol> <logic:iterate id="element" name="bean" property="stringArray" indexId="index"> <li><em><bean:write name="element"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 2 - Iterate Over A String Array [0..2]</h3> <ol> <logic:iterate id="element" name="bean" property="stringArray" indexId="index" length="3"> <li><em><bean:write name="element"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 3 - Iterate Over A String Array [3..4]</h3>
<ol> <logic:iterate id="element" name="bean" property="stringArray" indexId="index" offset="3"> <li><em><bean:write name="element"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 4 - Iterate Over A String Array [1..3]</h3>
<ol> <logic:iterate id="element" name="bean" property="stringArray" indexId="index" offset="1" length="3"> <li><em><bean:write name="element"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 5 - Iterate Over an Array List</h3>
<ol> <logic:iterate id="item" name="list" indexId="index"> <li><em><bean:write name="item"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 6 - Iterate Over an Array List [0..2]</h3>
<ol> <logic:iterate id="item" name="list" indexId="index" offset="0" length="3"> <li><em><bean:write name="item"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 7 - Iterate Over an Array List [2..4]</h3>
<ol> <logic:iterate id="item" name="list" indexId="index" offset="2" length="3"> <li><em><bean:write name="item"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 8 - Iterate Over an int array</h3>
<ol> <logic:iterate id="item" name="intArray" indexId="index"> <li><em><bean:write name="item"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 9 - Iterate Over an int array [0..2]</h3>
<ol> <logic:iterate id="item" name="intArray" indexId="index" length="3"> <li><em><bean:write name="item"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
<h3>Test 10 - Iterate Over an int array [2..4]</h3>
<ol> <logic:iterate id="item" name="intArray" indexId="index" offset="2" length="3"> <li><em><bean:write name="item"/></em> [<bean:write name="index"/>]</li> </logic:iterate> </ol>
Выполняет тело тега, если объект типа ActionMessages или ActionErrors находится (не находится) в запросе.
Тело данного тега выполняется, только если указанное значение присутствует. <logic:present name="bean" property="stringProperty"> present </logic:present> <logic:notPresent name="bean" property ="stringProperty"> notPresent </logic:notPresent> Struts Nested Tags Данная библиотека тегов расширяет возможности тегов всех предыдущих библиотек так, что позволяет определить, в контексте какого 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-тегов исчезает необходимость повторного вызова методов для получения доступа к объектам, которые уже были доступны ранее.
ЖУРНАЛ СООБЩЕНИЙ (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) –выводит сообщения указанного уровня. Appender и Layout Вывод регистратора может быть направлен в различные места назначения. Каждому из них соответствует класс, реализующий интерфейс Appender. С помощью метода addAppender(Appender newAppender) класса Logger можно добавить Apeender к регистратору. Один регистратор может иметь несколько элементов Appender. Вывод на консоль осуществляется с помощью класса ConsoleAppender. Класс FileAppender используется для вывода сообщений в файл. Для установки файла, в который будет выполняться вывод, нужно передать имя файла в конструктор FileAppender(Layout layout, String filename) или метод setFile(String file). По умолчанию любые сообщения, записанные в файл, будут добавляться к уже имеющимся. Изменить это можно с помощью конструктора FileAppender(Layout layout, String filename, boolean append) сбросив флаг append или с помощью метода setAppend(boolean append). Кроме того, вывод в базу данных можно произвести с помощью класса JDBCAppender, в журнал событий ОС – NTEventLogAppender, на SMTP-сервер – SMTPAppender, на удаленный сервер – SocketAppender. Любой вывод, сделанный в регистраторе, будет направлен всем его предкам. Чтобы этого избежать, в регистраторе следует установить флаг аддитивности Вывод регистратора может иметь различный формат. Каждый формат представлен классом, производным от Layout. Все методы класса Layout предназначены только для создания подклассов. В библиотеке определены следующие: HTMLLayout – вывод в HTML-формате; XMLLayout – вывод в XML-формате; SimpleLayout – вывод в простом текстовом формате. Более информативен вывод в XML-формате. Установить Layout для FileAppender или ConsoleAppender можно В приведенном ниже примере производятся регистрация и вывод как обычных информационных сообщений о выполненных действиях, так и сообщений о возникающих ошибках (попытке вычисления факториала отрицательного числа). /* пример # 1: регистратор ошибок: Demo Log.java */package app6; import org.apache.log4j.Logger; import org.apache.log4j.FileAppender; import org.apache.log4j.SimpleLayout; import org.apache.log4j.Level; import java.io.IOException;
public class DemoLog { static Logger logger = Logger.getLogger(DemoLog. class);
public static void main(String[] args) { try { //возможна и программная настройка factorial(9); factorial(-3); } catch (IllegalArgumentException e) { //вывод сообщения уровня ERROR logger.error("negative argument", e); } } public static int factorial(int n) { if (n < 0) throw new IllegalArgumentException( "argument " + n +" less then zero"); //вывод сообщения уровня DEBUG logger.debug("Argument n is " + n); int result = 1; for (int i = n; i >= 1; i--) result *= i; //вывод сообщения уровня INFO logger.info("Result is " + result); return result; } } При этом в корне проекта должен находиться конфигурационный файл "log4j.xml" со следующим содержимым: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="TxtAppender" class="org.apache.log4j.FileAppender"> <param name="File" value="log.txt" /> <layout class="org.apache.log4j.SimpleLayout"/> </appender> <logger name="app6"> <level value="debug" /> </logger> <root> <appender-ref ref="TxtAppender" /> </root> </log4j:configuration> Вывод регистратора "app6.DemoLog", в файл log.txt будет следующим: Не нашли, что искали? Воспользуйтесь поиском:
|