Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Приложение ajaxguessnumber

Чтобы продемонстрировать преимущества использования Ajax, вернитесь к примеру guessnumber из главы 8 «Введение в Facelets». Если вы измените этот пример для использования Ajax, ответ не должен отображаться на странице response.xhtml. Вместо этого выполняется асинхронный вызов серверного компонента, и ответ отображается на исходной странице путём обработки только компонента ввода, а не путём отправки формы.

Исходный код для этого приложения находится в каталоге tut-install/examples/web/jsf/ajaxguessnumber/ .

Здесь рассматриваются следующие темы:

Исходный код ajaxguessnumber

Изменения в приложении guessnumber происходят в двух исходных файлах.

Здесь рассматриваются следующие темы:

Страница ajaxgreeting.xhtml Facelets

Страница Facelets для ajaxguessnumber — ajaxgreeting.xhtml — почти такая же, как страница greeting.xhtml для приложения guessnumber:

<h:head>
    <h:outputStylesheet library="css" name="default.css"/>
    <title>Ajax Guess Number Facelets Application</title>
</h:head>
<h:body>
    <h:form id="AjaxGuess">
        <h:graphicImage value="#{resource['images:wave.med.gif']}"
                        alt="Duke waving his hand"/>
        <h2>
            Hi, my name is Duke. I am thinking of a number from
            #{dukesNumberBean.minimum} to #{dukesNumberBean.maximum}.
            Can you guess it?
        </h2>
        <p>
            <h:inputText id="userNo"
                         title="Enter a number from 0 to 10:"
                         value="#{userNumberBean.userNumber}">
                <f:validateLongRange minimum="#{dukesNumberBean.minimum}"
                                     maximum="#{dukesNumberBean.maximum}"/>
            </h:inputText>

            <h:commandButton id="submit" value="Submit">
                <f:ajax execute="userNo" render="outputGroup" />
            </h:commandButton>
        </p>
        <p>
            <h:panelGroup layout="block" id="outputGroup">
                <h:outputText id="result" style="color:blue"
                              value="#{userNumberBean.response}"
                              rendered="#{!facesContext.validationFailed}"/>
                <h:message id="errors1"
                           showSummary="true"
                           showDetail="false"
                           style="color: #d20005;
                           font-family: 'New Century Schoolbook', serif;
                           font-style: oblique;
                           text-decoration: overline"
                           for="userNo"/>
            </h:panelGroup>
        </p>
    </h:form>
</h:body>

Самое важное изменение в теге h:commandButton. Атрибут action удалён из тега, а тег f:ajax добавлен.

Тег f:ajax указывает, что при клике кнопки будет выполнен компонент h:inputText со значением id userNo. Затем отображаются компоненты в группе панелей outputGroup. Если возникает ошибка валидации, Managed-бин не выполняется и сообщение об ошибке валидации отображается на панели сообщений. В противном случае результат предположения отображается в компоненте result.

Вспомогательный бин UserNumberBean

Небольшое изменение также внесено в код UserNumberBean, чтобы компонент вывода не отображал никаких сообщений для значения по умолчанию (null) свойства response. Вот модифицированный код компонента:

public String getResponse() {
    if ((userNumber != null)
            && (userNumber.compareTo(dukesNumberBean.getRandomInt()) == 0)) {
        return "Yay! You got it!";
    }
    if (userNumber == null) {
        return null;
    } else {
        return "Sorry, " + userNumber + " is incorrect.";
    }
}

Managed-бин CDI DukesNumberBean

Managed-бин EJB DukesNumberBean с областью видимости сессии хранит диапазон возможных чисел и случайно выбранное числов из этого диапазона. Он инъецируется в UserNumberBean аннотацией CDI @Inject, так что значение случайного числа можно сравнить с числом, отправленным пользователем:

@Inject
DukesNumberBean dukesNumberBean;

Запуск ajaxguessnumber

Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска приложения ajaxguessnumber.

Здесь рассматриваются следующие темы:

Сборка, упаковка и развёртывание ajaxguessnumber в IDE NetBeans

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/web/jsf
  4. Выберите каталог ajaxguessnumber.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» кликните правой кнопкой мыши проект ajaxguessnumber и выберите «Сборка».

    Эта команда собирает и развёртывает проект.

Сборка, упаковка и развёртывание ajaxguessnumber с помощью Maven

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В окне терминала перейдите в:

    tut-install/examples/web/jsf/ajaxguessnumber/
  3. Введите следующую команду:

    mvn install

    Эта команда собирает и упаковывает приложение в WAR-файл, ajaxguessnumber.war, расположенный в каталоге target. Затем она развертывает приложение.

Запуск ajaxguessnumber

  1. В веб-браузере введите следующий URL:

    http://localhost:8080/ajaxguessnumber
  2. Введите значение в поле и нажмите «Отправить».

    Если значение находится в диапазоне от 0 до 10, в сообщении указывается, является ли предположение правильным или неправильным. Если значение выходит за пределы этого диапазона или если это не число, сообщение об ошибке отображается красным цветом.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)