Приложение compositecomponentexample
создаёт составной компонент, который принимает имя (или любую другую строку). Компонент взаимодействует с Managed-бином, который вычисляет, является ли сумма букв в имени после их преобразования в числовые значения, простым числом. Компонент отображает сумму значений букв и сообщает, является ли она простым числом или нет.
Приложение compositecomponentexample
содержит файл составного компонента, страницу использования и Managed-бин.
Исходный код для этого приложения находится в каталоге tut-install/examples/web/jsf/compositecomponentexample/
.
Здесь рассматриваются следующие темы:
Файл составного компонента
Файл составного компонента представляет собой XHTML-файл /web/resources/ezcomp/PrimePanel.xhtml
. Он имеет раздел composite:interface
, который объявляет метки для имени и кнопки команд. Он также объявляет Managed-бин, который определяет свойства для имени.
<composite:interface>
<composite:attribute name="namePrompt"
default="Name, word, or phrase: "/>
<composite:attribute name="calcButtonText" default="Calculate"/>
<composite:attribute name="calcAction"
method-signature="java.lang.String action()"/>
<composite:attribute name="primeBean"/>
<composite:editableValueHolder name="nameVal" targets="form:name"/>
</composite:interface>
Реализация составного компонента принимает введённое значение для свойства name
Managed-бина. Тег h:outputStylesheet
определяет таблицу стилей как перемещаемый ресурс. Затем реализация указывает формат вывода, используя свойства Managed-бина, а также формат сообщений об ошибках. Значение суммы отображается только после того, как оно было рассчитано, а отчёт о том, является ли сумма простой или нет, отображается только при валидации введённого значения.
<composite:implementation>
<h:form id="form">
<h:outputStylesheet library="css" name="default.css"
target="head"/>
<h:panelGrid columns="2" role="presentation">
<h:outputLabel for="name"
value="#{cc.attrs.namePrompt}"/>
<h:inputText id="name"
size="45"
value="#{cc.attrs.primeBean.name}"
required="true"/>
</h:panelGrid>
<p>
<h:commandButton id="calcButton"
value="#{cc.attrs.calcButtonText}"
action="#{cc.attrs.calcAction}">
<f:ajax execute="name" render="outputGroup"/>
</h:commandButton>
</p>
<h:panelGroup id="outputGroup" layout="block">
<p>
<h:outputText id="result" style="color:blue"
rendered="#{cc.attrs.primeBean.totalSum gt 0}"
value="Sum is #{cc.attrs.primeBean.totalSum}" />
</p>
<p>
<h:outputText id="response" style="color:blue"
value="#{cc.attrs.primeBean.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="name"/>
</p>
</h:panelGroup>
</h:form>
</composite:implementation>
Страница использования
Страница использования в этом примере приложения, web/index.xhtml
, представляет собой XHTML-файл, который вызывает файл составного компонента PrimePanel.xhtml
вместе с Managed-бином. Это валидирует ввод пользователя.
<div id="compositecomponent">
<ez:PrimePanel primeBean="#{primeBean}"
calcAction="#{primeBean.calculate}">
</ez:PrimePanel>
</div>
Managed-бин
Managed-бин PrimeBean.java
определяет метод с именем calculate
, который выполняет вычисления для введённой строки и соответственно устанавливает свойства. Сначала бин создаёт массив простых чисел. Он вычисляет сумму букв в строке, где 'a'
равно 1 и 'z'
равно 26, и определяет, можно ли найти значение в массиве простых чисел. Заглавная буква во введённой строке имеет то же значение, что и её строчный эквивалент.
Компонент определяет минимальный и максимальный размер строки name
, которая обеспечивается ограничением @Size
Bean Validation. Бин использует аннотацию @Model
, объединяющую @Named
и @RequestScoped
, как описано в шаге 7 из Просмотр веб-модуля hello1 в IDE NetBeans.
@Model
public class PrimeBean implements Serializable {
...
@Size(min=1, max=45)
private String name;
...
public String calculate() {
...
}
}
Запуск compositecomponentexample
Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска примера compositecomponentexample
.
Здесь рассматриваются следующие темы:
Сборка, упаковка и развёртывание compositecomponentexample в IDE NetBeans
-
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
-
В меню «Файл» выберите «Открыть проект».
-
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/web/jsf
-
Выберите каталог compositecomponentexample
.
-
Нажмите Открыть проект.
-
На вкладке «Проекты» кликните правой кнопкой мыши проект compositecomponentexample
и выберите «Сборка».
Эта команда собирает и развёртывает приложение.
Сборка, упаковка и развёртывание compositecomponentexample с использованием Maven
-
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
-
В окне терминала перейдите в:
tut-install/examples/web/jsf/compositecomponentexample/
-
Введите следующую команду, чтобы собрать и развернуть приложение:
Запуск compositecomponentexample
-
В веб-браузере введите следующий URL:
http://localhost:8080/compositecomponentexample
-
На появившейся странице введите строку в поле Имя, слово или фразу, затем нажмите Рассчитать.
Страница сообщает сумму букв и является ли эта сумма простой. Ошибка проверки выдается, если значение не введено или строка содержит более 45 символов.