Давайте сразу перейдем к интересным вещам и скажем, что в 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 . |