В последние годы Java постепенно набирает обороты. С выпуском Java SE 5 и Java SE 6 будущее Java стало еще более блестящим. Однако JSP на основе Java не смог поднять голову до запуска Java SE 5. Самая важная причина заключается в том, что, хотя JSP очень мощный, его самое большое преимущество одновременно является и самым большим недостатком. Мощные функции означают сложность, особенно Есть. Визуальных инструментов для проектирования интерфейсов интерфейса не так много, и они недостаточно мощны. Поэтому проектирование страниц JSP становится очень сложным и громоздким...
В последние годы Java постепенно набирает обороты. С выпуском Java SE 5 и Java SE 6 будущее Java стало еще более блестящим. Однако JSP на основе Java не смог поднять голову до запуска Java SE 5. Самая важная причина заключается в том, что, хотя JSP очень мощный, его самое большое преимущество одновременно является и самым большим недостатком. Мощные функции означают сложность, особенно Есть. не так много визуальных инструментов для проектирования интерфейсов, и они недостаточно мощны. Поэтому проектирование страниц JSP становится очень сложным и громоздким. Однако одновременно с выпуском Java SE 5 компания Sun выпустила новую спецификацию JavaServer Faces (сокращенно JSF), чтобы упростить разработку JSP. Это ставит JSP на светлый путь.
1. Что такое
JSF и JSP — новая пара? JSP — это технология, используемая для фоновой логической обработки, а JSF — полная противоположность. Это технология, которая позволяет разработчикам быстро разрабатывать веб-приложения на основе Java. Это технология уровня представления. В настоящее время JSF1.2 официально добавлен в Java EE 5 в качестве стандарта.
Благодаря высококомпонентной технологии разработчики могут реализовывать операции редактирования перетаскиванием при поддержке некоторых инструментов разработки. Пользователям достаточно просто перетащить компоненты JSF на страницу, чтобы легко выполнять веб-разработку. Это самое большое преимущество компонентной технологии. Компоненты, которые мы можем использовать, — это не только относительно простые поля ввода, но и более сложные компоненты, такие как компоненты таблиц, такие как компоненты DataTable Tree и так далее.
В качестве стандартной технологии JSF также поддерживается многими поставщиками инструментов. В то же время у нас также будет много хороших бесплатных инструментов разработки. Не так давно Sun Java Studio Creator 2 и Oracle JDeveloper 10g были выпущены как бесплатные инструменты разработки, поддерживающие JSF, что придало JSF большую жизнеспособность. Кроме того, у нас также есть несколько отличных коммерческих инструментов разработки на основе Eclipse, таких как BEA Workshop (ранее M7 NitroX), Exadel и MyEclipse, которые принесли большое удобство большинству нынешних пользователей Eclipse IBM. Rational Application Developer и JBuilder от Borland также являются очень хорошими коммерческими инструментами разработки, поддерживающими визуальную разработку JSF.
JSF фундаментально отличается от традиционной веб-технологии. Традиционная веб-технология требует от пользователей захватывать запросы браузера, сохранять состояние клиента, вручную управлять перенаправлением страниц и т. д. Появление JSF, несомненно, принесло нам большое удобство. JSF предоставляет модель навигации по страницам, управляемую событиями, которая позволяет разработчикам приложений проектировать поток страниц приложений. Подобно подходу Struts, вся информация о потоке страниц определяется в XML-файле конфигурации JSF (faces-config.xml), а не жестко запрограммирована в приложении. Это значительно упрощает разработку для разработчиков и упрощает разработку приложений.
В то же время JSF также является платформой, которая следует шаблону модель-представление-контроллер (MVC). Он обеспечивает полное разделение кода представления (View) и логики приложения (Model), позволяя приложениям, использующим технологию JSF, добиться хорошего разделения страниц и кода. Все запросы к страницам JSF будут обрабатываться через интерфейсный контроллер (FacesServlet). Система автоматически обрабатывает запрос пользователя и возвращает результат пользователю. Это мало чем отличается от традиционной структуры MVC.
JSF не только использует технологию POJO, но также использует технологию Spring-like Inversion of Control (IoC) (или Dependency Injection-DI). В Backing Bean JSF мы можем поместить данные и операции, необходимые для представления. Поместите их в Backing Bean. . В то же время, благодаря технологии DI, используемой JSF, мы можем инициализировать Managed Bean в файле конфигурации. В то же время мы также можем использовать эту технологию для простой интеграции со Spring, который использует аналогичную технологию.
2. Как использовать JSF в JSP
JSF может полностью проявить свой эффект, только объединив его с JSP. JSF интегрируется через библиотеки тегов и JSP. Библиотека тегов эквивалентна серверному компоненту ASP.NET. JSF предоставляет очень богатую библиотеку тегов, с помощью которой можно создавать различные клиентские модели, такие как HTML, WML, XML и JavaScript. С помощью этих тегов вы можете легко создавать крупномасштабные модели клиентов и автоматически обрабатывать запросы клиентов с помощью этих тегов.
Далее давайте рассмотрим пример того, как заставить JSF и JSP работать вместе. В JSF есть две библиотеки. Первый называется библиотекой ядра и содержит различные основные теги, такие как настройка компонентов, управление событиями, проверка входной информации и т. д. Основная функция второй библиотеки — соответствие различным тегам HTML и JSF. Каждый тег JSF соответствует компоненту HTML. Например, тег UIInput соответствует текстовому полю или полю пароля в HTML.
Поле ввода текста в теге JSF называется inputText, а библиотека ввода паролей — inputSecret. Ниже приведена простая программа пользовательского интерфейса, сочетающая JSF и JSP.
<%@ taglib uri=" http://java.sun.com/jsf/html " prefix="h" %>
<%@ taglib uri=" http://java.sun.com/jsf/core " префикс ="f" %>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GB2312">
<title>Первая программа JSF </title>
</head >
<body>
<f:view>
<h:form id="simpleForm">
<h:outputText id="favoriteLabel" value="Пожалуйста, введите число:"/>
<h:inputText id="favoriteValue" value= " #{simple.longValue}">
<f:validateLongrange Maximum="30" минимум="0"/>
</h:inputText>
<p/>
<h:commandButton id="submit" value="Submit" action = "#{simple.simpleActionMethod}"/>
</h:form>
</f:view>
</body>
</html>
В приведенном выше коде мы можем понять, как JSF интегрируется с JSP. Сначала мы видим метку ядра: view. Еще есть несколько компонентов JSF. Такие как форма, выходной текст, входной текст и кнопка команды. Эти компоненты помещаются в форму и становятся ее частью. В самом начале программы необходимо импортировать две библиотеки тегов с помощью import. Код следующий.
<%@ taglib uri=" http://java.sun.com/jsf/html " prefix="h" %>
<%@ taglib uri=" http://java.sun.com/jsf/core " префикс ="f" %>
Две приведенные выше строки кода определяют, какую библиотеку тегов JSF использовать в JSP. Библиотека ядра объявляется с префиксом f, а библиотека HTML — с префиксом h. Эти два префикса не являются обязательными, но являются лишь рекомендацией. В программе необходимо использовать библиотеку ядра, поскольку представление должно использоваться на всех страницах JSF. Тег HTML преобразует тег JSF в компонент HTML во время выполнения. Этот префикс h не является обязательным, но рекомендуется спецификацией JSF. Таким образом, мы делаем нашу программу JSF более читабельной.
После объявления идет несколько строк стандартных операторов HTML, которые не будут подробно описываться в этой статье. Начиная с
<f:view>
<h:form id="simpleForm">
<h:outputText id="favoriteLabel" value="Пожалуйста, введите число:"/>
<h:inputText id="favoriteValue" value="#{simple.longValue}">
<f:validateLongrange Maximum="30" минимум="0"/>
</h:inputText>
<p/>
<h:commandButton id="submit" value=" Отправить "
action="#{simple.simpleActionMethod}"/>
</h:form>
</f:view>
</f:view> знаменует начало JSF, а его следующая форма тега создаст HTML-форму. Тег outputText эквивалентен компоненту метки в HTML. Тег inputText эквивалентен компоненту textField в HTML. Тег CommandButton эквивалентен кнопке отправки в HTML. Запустив эту программу JSP, вы получите эффект, показанный на рисунке 1.
3. Как JSP отвечает на запросы JSF
Из приведенного выше примера мы уже знаем, как использовать JSF в JSP. В этой части давайте посмотрим, как обрабатываются запросы в JSF.
Сначала давайте рассмотрим пример перевода градусов Фаренгейта в Цельсий. Программа выполнит переход, когда пользователь нажмет кнопку отправки.
<%@ taglib uri=" http://java.sun.com/jsf/html " prefix="h" %>
<%@ taglib uri=" http://java.sun.com/jsf/core " префикс ="f" %>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GB2312">
<title>Программа преобразования температуры</title>
</head>
< body>
<f:view>
<h:form>
<div>
<h:outputText id="fahrenheitLabel" value="Пожалуйста, введите температуру по Фаренгейту:"/>
<span>
<h:inputText id="temperature" value= " #{tc.fahrenheitTemp}">
<f:validateDoublerange минимум="-100.0" максимум="100.0"/>
<f:valuechangeListener type="tempconv.page.TCChangedListener"/>
</h:inputText>
</span >
</div>
<div>
<h:outputText id="celsiusLabel" value="Температура по Цельсию:"/>
<span>
<h:outputText id="celsiusValue" value="#{tc.celsiusTemp}">
< f :convertNumber maxFractionDigits="3" type="number"/>
</h:outputText>
</span>
</div>
<div>
<h:commandButton value="Convert" action="#{tc.convert} " >
</h:commandButton>
</div>
</h:form>
</f:view>
</body>
</html>
В первых двух строках программы импортируются основная библиотека JSF и библиотека HTML. Это уже обсуждалось ранее и не будет обсуждаться здесь подробно.
Давайте посмотрим, как теги JSF взаимодействуют с серверной частью. Поскольку мы используем JSF в JSP, нет никакой разницы между этим и обычным JSP. При первом запуске JSP компилятор JSP компилирует файл .JSP в сервлет, а затем вызывает его. Затем сервлет получает поток данных от клиента. Но в отличие от обычных программ JSP, теги JSF вызываются через API JSF (это позволяет разделить логический уровень и уровень представления). В остальном они ничем не отличаются от обычных тегов JSP.
Когда тег UIComponent получает метод doStartTag, JSF будет использовать эти свойства для установки значения тега. Например, тег inputText в этом примере будет установлен в соответствии со значением его атрибута. Ниже приведен фрагмент кода из JSF.
<h:inputText id="temperature" value="#{tc.fahrenheitTemp}">
<f:validateDoublerange минимум="-100.0" максимум="100.0"/>
<f:valuechangeListener type="tempconv.page.TCChangedListener" />
</h:inputText>
Тег inputText устанавливает атрибуты id и value в соответствии с соответствующими значениями. В JSF каждое значение атрибута задается через setAttribute(имя строки, значение объекта). Но следует отметить, что теги JSF могут указывать соответствующие значения по умолчанию. Это чем-то похоже на системные свойства в Java. Если вы укажете имя свойства, система вернет значение свойства. Если вы укажете значение по умолчанию, а свойство не существует, будет возвращено значение по умолчанию.
Далее давайте взглянем на наиболее важную часть приведенной выше программы — обработку событий компонента UIInput.
В JSF обработка событий завершается тегом valuechangeListener. Событие, представленное этой меткой, вызывает событие при изменении значения текстового поля. Но что интересно, это событие не отправляется немедленно. Вместо этого событие и соответствующие данные не передаются на серверную часть до тех пор, пока пользователь не нажмет кнопку «Отправить». Поэтому этот запрос события также называется предварительной фиксацией. Наконец, давайте посмотрим на реализацию кода UICommand.
<div>
<h:commandButton value="Conversion" action="#{tc.convert}">
</h:commandButton>
</div>
Приведенный выше код соединяет метод Convert() и UICommand, то есть, после нажатия кнопки «Отправить» будет выполнен метод Convert(). После обнаружения тега представления выдается результат программы JSF, и JSFAPI наконец вызывает метод doEnd для завершения программы JSF. После анализа этой программы механизм JSF преобразует соответствующие теги JSF в компоненты HTML.
Наконец, давайте посмотрим, как JSP реагирует на события JSF. Ниже приведен фрагмент кода Java, который реагирует на события JSF.
public class TCChangedListener реализует ValueChangeListener
{
public TCChangedListener()
{
super
();
}
// Обработка событий
public voidprocessValueChange(ValueChangeEvent event)
бросает AbortProcessingException
{
UIComponent comp = event.getComponent();
Object value = event.getNewValue();
null != значение)
{
float curVal = ((Number) value).floatValue();
Значения карты = comp.getAttributes();
if (curVal < 0)
{
values.put("styleClass", "red") ;
}
else
{
values.put("styleClass", "black");
}
}
}
Чтобы реагировать на события JSF, необходимо реализовать интерфейс ValueChangeListener в библиотеке JSF. Что следует отметить в приведенной выше программе, так это то, что соответствующий цвет окончательно устанавливается в соответствии с введенным значением. Эти значения не зависят от JSP. Конечно, вы также можете установить для них значение null и позволить тегам JSP устанавливать их цвета.