Давайте сразу перейдем к интересным вещам и скажем, что в JSF 2.0 авторы страниц сделали пользовательский компонент доступным, настроив его в библиотеке тегов Facelet ( *taglib.xml ). Более того, когда компонент отображается в JAR, необходима специальная запись в web.xml , указывающая на файл *taglib.xml . Начиная с JSF 2.2, эти файлы нам больше не нужны. Простой пользовательский компонент JSF 2.2 содержит один класс, и он может выглядеть следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@FacesComponent(value = "components.HelloWorldComponent", createTag = true)public class HelloWorldComponent extends UIComponentBase { @Override public String getFamily() { return "hello.world.component"; } @Override public void encodeBegin(FacesContext context) throws IOException { ResponseWriter writer = context.getResponseWriter(); writer.write("Hello World!"); }} |
Большая часть тяжелой работы выполняется аннотацией javax.faces.component.FacesComponent ( javax.faces.component.FacesComponent ). Все, что нам нужно сделать, это установить для элемента createTag значение true , и JSF должен создать для нас тег. Кроме того, мы можем легко использовать наши пользовательские компоненты, как показано в следующем коде:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <h:head> <title></title> </h:head> <h:body> <t:helloWorldComponent/> </h:body></html> |
Примечание. Обратите внимание, что пространство имен компонента по умолчанию: http://xmlns.jcp.org/jsf/component . Это верно для всех компонентов, которые не имеют явного пространства имен.
@FacesComponent список элементов, поддерживаемых JSF 2.2 @FacesComponent выглядит следующим образом:
-
createTag: это может быть установлено вtrueилиfalse. Когда для него установлено значение true, JSF сгенерирует для нас тег (точнее, JSF создаст во время выполнения обработчик тега Facelet, расширяющийComponentHandler). Этот элемент может использоваться только в JSF 2.2. -
tagName: Это позволяет нам указать имя тега. Когда дляcreateTagзадано значениеtrue, JSF будет использовать это имя для сгенерированного тега. Этот элемент может использоваться только в JSF 2.2. -
namespace: Это позволяет нам указать пространство имен тега. Когда дляcreateTagзадано значениеtrue, JSF будет использовать это пространство имен для сгенерированного тега. Если пространство имен не указано, JSF будет использоватьhttp://xmlns.jcp.org/jsf/пространство имен компонента. Этот элемент может использоваться только в JSF 2.2. -
value: этот элемент взят из JSF 2.0 и указывает тип компонента. Тип компонента может использоваться в качестве аргумента методаApplication.createComponent(java.lang.String)для создания экземпляров классаComponent. Начиная с JSF 2.2, если элемент value отсутствует или имеет значениеnull, JSF получит его, вызвав методgetSimpleName()класса, к которому присоединен@FacesComponentи@FacesComponentпервый символ в нижний регистр.
| Ссылка: | JSF 2.2 Создайте пользовательский компонент Hello World за 30 секунд от нашего партнера JCG Ангела Леонарда в блоге JSF и фанатов OmniFaces . |