Доступ к атрибутам составного компонента JSF2 в резервном компоненте

Я разрабатываю приложение JSF2 / Primefaces, и у меня проблемы с доступом к определенным атрибутам в интерфейсе составного компонента в поддерживающем bean-компоненте этого компонента.

Мой компонент определяется следующим образом :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:composite="http://java.sun.com/jsf/composite">

<composite:interface componentType="testComponent">
    <composite:attribute name="text" required="true" type="java.lang.String" />
</composite:interface>

<composite:implementation>

    <h:outputText value="Passed text is: #{cc.attrs.text}" />

</composite:implementation>

</html>

Он хранится в файле с именем text.xhtml , который находится в каталоге: application / src / main / webapp / resources / my_component .

Я использую этот компонент на другой странице (которая является элементом композиции Facelets) следующим образом:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:myc="http://java.sun.com/jsf/composite/my_component"
    template="./resources/templates/template.xhtml">

<ui:define name="content"> 
    <h:form id="products">
        <myc:test id="test" text="A text" />
    </h:form>
</ui:define>    

</ui:composition>

Класс вспомогательного компонента определяется следующим образом:

package my.application.component;

import javax.faces.component.FacesComponent;
import javax.faces.component.UINamingContainer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@FacesComponent ( value="testComponent" )
public class TestComponent extends UINamingContainer {
    Logger log = LoggerFactory.getLogger(TestComponent.class);

    public TestComponent() {
        log.debug("TestComponent constructor");
        log.debug("getAttributes().size(): " + getAttributes().size());
    }
}

Сам компонент работает, как ожидалось.Используемая страница отображает Переданный текст: Выходной текст . Кроме того, вывод журнала отображает сообщения журнала от конструктора TestComponent , поэтому кажется, что определение xml компонента правильно связано с классом TestComponent .

Теперь проблема заключается в том, что метод getAttributes () , вызванный в конструкторе TestComponent , всегда возвращает карту нулевого размера. Если я правильно понимаю, я смогу получить доступ к атрибуту text , объявленному в интерфейсе компонента, с помощью вызова:

getAttributes (). Get ("text");

в ] TestComponent , но он всегда возвращает null , поскольку карта атрибутов пуста.

Я также попытался получить доступ к атрибуту text с помощью вызова:

String text = FacesContext.getCurrentInstance (). GetApplication (). AssessmentExpressionGet (FacesContext.getCurrentInstance (), "# {cc.attrs.text}", String.class));

, но также разрешается в null .

Что я делаю не так? Любые советы будут очень признательны, так как я понятия не имею, что попробовать дальше.

/ Тукаш.

6
задан Tukasz Januaz 20 February 2012 в 08:55
поделиться