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

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

Пример encoder: использование альтернатив

В примере encoder показано, как использовать альтернативы для выбора между двумя компонентами во время развёртывания, как описано в Использование альтернатив в приложениях CDI. Пример включает в себя интерфейс и две его реализации, Managed-бин, страницу Facelets и файлы конфигурации.

Исходные файлы находятся в каталоге tut-install/examples/cdi/encoder/src/main/java/javaeetutorial/encoder/.

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

Интерфейс и реализации encoder

Интерфейс Coder содержит только один метод, codeString, принимающий два аргумента: строку и целочисленное значение, определяющее способ транспонирования букв в строке.

public interface Coder {

    public String codeString(String s, int tval);
}

Интерфейс имеет два класса реализации: CoderImpl и TestCoderImpl. Реализация codeString в CoderImpl сдвигает строковый аргумент вперед в алфавите на количество букв, указанное во втором аргументе. Любые символы, которые не являются буквами, остаются без изменений. (Этот простой код смены известен как шифр Цезаря, потому что Юлий Цезарь по сообщениям использовал его для связи со своими генералами.) Реализация в TestCoderImpl просто отображает значения аргументов. Реализация TestCoderImpl аннотирована @Alternative:

import javax.enterprise.inject.Alternative;

@Alternative
public class TestCoderImpl implements Coder {

    @Override
    public String codeString(String s, int tval) {
        return ("input string is " + s + ", shift value is " + tval);
    }
}

Файл beans.xml примера encoder содержит элемент alternatives для класса TestCoderImpl, но по умолчанию элемент закомментирован:

<beans ...>
    <!--<alternatives>
        <class>javaeetutorial.encoder.TestCoderImpl</class>
    </alternatives>-->
</beans>

Это означает, что по умолчанию класс TestCoderImpl, аннотированный @Alternative, не будет использоваться. Вместо этого будет использован класс CoderImpl.

Страница Facelets и Managed-бин encoder

Простая страница Facelets index.xhtml примера encoder просит пользователя ввести строковые и целочисленные значения и передаёт их в Managed-бин, CoderBean как coderBean.inputString и coderBean.transVal:

<html lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <h:outputStylesheet library="css" name="default.css"/>
        <title>String Encoder</title>
    </h:head>
    <h:body>
        <h2>String Encoder</h2>
        <p>Type a string and an integer, then click Encode.</p>
        <p>Depending on which alternative is enabled, the coder bean
            will either display the argument values or return a string that
            shifts the letters in the original string by the value you
            specify. The value must be between 0 and 26.</p>
        <h:form id="encodeit">
            <p><h:outputLabel value="Enter a string: " for="inputString"/>
                <h:inputText id="inputString"
                             value="#{coderBean.inputString}"/>
                <h:outputLabel value="Enter the number of letters to shift by: "
                               for="transVal"/>
                <h:inputText id="transVal" value="#{coderBean.transVal}"/></p>
            <p><h:commandButton value="Encode"
                                action="#{coderBean.encodeString()}"/></p>
            <p><h:outputLabel value="Result: " for="outputString"/>
                <h:outputText id="outputString"
                              value="#{coderBean.codedString}"
                              style="color:blue"/></p>
            <p><h:commandButton value="Reset"
                                action="#{coderBean.reset}"/></p>
        </h:form>
        ...
    </h:body>
</html>

Когда пользователь кликает кнопку «Encode», страница вызывает метод encodeString Managed-бина и отображает результат coderBean.codedString синим цветом. На странице также есть кнопка сброса, которая очищает поля.

Managed-бин CoderBean является компонентом @RequestScoped, который объявляет свои свойства ввода и вывода. Свойство transVal имеет три ограничения Bean Validation, которые устанавливают ограничения на целочисленное значение, поэтому, если пользователь вводит недопустимое значение, на странице Facelets появляется сообщение об ошибке по умолчанию. Бин также инъецирует объект интерфейса Coder:

@Named
@RequestScoped
public class CoderBean {

    private String inputString;
    private String codedString;
    @Max(26)
    @Min(0)
    @NotNull
    private int transVal;

    @Inject
    Coder coder;
    ...

В дополнение к простым get- и set-методам для трёх свойств, бин определяет метод действия encodeString, вызываемый страницей Facelets. Этот метод устанавливает для свойства codedString значение, возвращаемое при вызове метода codeString реализации Coder:

    public void encodeString() {
        setCodedString(coder.codeString(inputString, transVal));
    }

Наконец, бин определяет метод reset для очистки полей страницы Facelets:

    public void reset() {
        setInputString("");
        setTransVal(0);
    }

Запуск encoder

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

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

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

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

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

    tut-install/examples/cdi
  4. Выберите каталог encoder.

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

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

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

Запуск encoder с IDE NetBeans

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

    http://localhost:8080/encoder
  2. На странице String Encoder введите строку и количество букв для сдвига, а затем нажмите Encode.

    Закодированная строка отображается синим цветом в строке результатов. Например, если вы введёте Java и 4, результатом будет Neze.

  3. Теперь отредактируйте файл beans.xml, чтобы включить альтернативную реализацию Coder.

    1. На вкладке «Проекты» в проекте encoder разверните узел Веб-страницы, затем разверните узел WEB-INF.

    2. Выполните двойной клик на файле beans.xml, чтобы открыть его.

    3. Удалите символы комментария, которые окружают элемент alternatives, чтобы он выглядел следующим образом:

      <alternatives>
          <class>javaeetutorial.encoder.TestCoderImpl</class>
      </alternatives>
    4. Сохраните файл.

  4. Кликните правой кнопкой мыши проект encoder и выберите команду «Очистить и собрать».

  5. В веб-браузере повторно введите URL, чтобы отобразить страницу String Encoder для повторно развёрнутого проекта:

    http://localhost:8080/encoder/
  6. Введите строку и количество букв для сдвига, а затем нажмите «Encode».

    На этот раз в строке результатов отображаются ваши аргументы. Например, если вы введёте Java и 4, результат будет следующим:

    Result: input string is Java, shift value is 4

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

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

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

    tut-install/examples/cdi/encoder/
  3. Введите следующую команду для развёртывания приложения:

    mvn install

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

Запуск encoder с использованием Maven

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

    http://localhost:8080/encoder/

    Откроется страница String Encoder.

  2. Введите строку и количество букв для сдвига, а затем нажмите «Encode».

    Закодированная строка отображается синим цветом в строке результатов. Например, если вы введёте Java и 4, результатом будет Neze.

  3. Теперь отредактируйте файл beans.xml, чтобы включить альтернативную реализацию Coder.

    1. В текстовом редакторе откройте следующий файл:

      tut-install/examples/cdi/encoder/src/main/webapp/WEB-INF/beans.xml
    2. Удалите символы комментария, которые окружают элемент alternatives, чтобы он выглядел следующим образом:

      <alternatives>
          <class>javaeetutorial.encoder.TestCoderImpl</class>
      </alternatives>
    3. Сохраните и закройте файл.

  4. Введите следующую команду:

    mvn clean install
  5. В веб-браузере повторно введите URL, чтобы отобразить страницу String Encoder для повторно развёрнутого проекта:

    http://localhost:8080/encoder
  6. Введите строку и количество букв для сдвига, а затем нажмите «Encode».

    На этот раз в строке результатов отображаются ваши аргументы. Например, если вы введёте Java и 4, результат будет следующим:

    Result: input string is Java, shift value is 4

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