Datatable внутри программно добавленного составного компонента

Ссылаясь на мой предыдущий вопрос (Программно создавать и добавлять составные компоненты в компоненте поддержкиЯ успешно смог добавить составные компоненты из бобов. Теперь у меня возникла новая проблема, так как составной компонент с отложенными данными в нем не вызывает метод load () вообще. Об этом было сообщение об ошибке (https://code.google.com/p/primefaces/issues/detail?id=3258) но это помечено как относящееся к PF3.0.RC1, и я понятия не имею, исправлено ли это для версии 3.5, которую я использую.

Я использую точно такой же код BalusC, о котором говорилось, с возможностью добавления выражений значений в составной компонент:

public void includeCompositeComponent(UIComponent parent, String libraryName, String resourceName, String id, Map<String, String> valueExpressions) {
    ...
    if (!valueExpressions.isEmpty()) {
        ExpressionFactory factory = application.getExpressionFactory();
        ELContext ctx = context.getELContext();
        for (Map.Entry<String, String> entry : valueExpressions.entrySet()) {
            ValueExpression expr = factory.createValueExpression(ctx, entry.getValue(), String.class);
            composite.setValueExpression(entry.getKey(), expr);
        }
    } 
    ...
}

И это мой составной компонент testDatatable.xhtml:

<cc:interface>
    <composite:attribute name="model" required="true" type="org.primefaces.model.LazyDataModel"/>
    <composite:attribute name="id" default="dataTable"/>
</cc:interface>
<cc:implementation>
    <h:form id="dataTableForm">    
        <p:dataTable id="#{cc.attrs.id}" value="#{cc.attrs.model}" var="test" paginator="true" rows="10"
                     paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                     rowsPerPageTemplate="5,10,15,20" lazy="true">
            <p:column>
                <h:outputText value="#{test.car.model}"/>
            </p:column>
         </p:dataTable>
    </h:form>
</cc:implementation>

А вот создание составного компонента из базового компонента:

Map<String, String> v = new HashMap<String, String>();
v.put("model", "#{testBean.lazyModel}");
addCompositeComponent(rootPanel, "comp", "testDatatable.xhtml", "table", v);

Вот ленивая модель данных, которую я загружаю в @PostConstruct

pulic class TestBean {
    private TestLazyDataModel<TestClass> lazyModel;

    @PostConstruct
    public void init() {
        lazyModel = new TestLazyDataModel();
    }

    public TestLazyDataModel<TestClass> getLazyModel() {
        return lazyModel;
    }

    class TestLazyDataModel extends LazyDataModel<TestClass> {
        @Override
        public List<TestClass> load(int first, int pageSize, String sort, SortOrder sortOrder, Map<String, String> filters) {
            List<TestClass> ret = new ArrayList<TestClass>();
            TestClass t = new TestClass();
            Car c = new Car("Volvo");
            t.setCar(c);
            ret.add(t);
            return ret;
        }
    }
}

И несколько вспомогательных классов:

public class TestClass {
    private Car car;

    public void setCar(Car car) {
        this.car = car;
    }

    public Car getCar() {
        return car;
    }
}

public class Car {
    public String model;

    public Car(String model) {
        this.model = model;
    }

    public String getModel() {
        return model;
    } 
}

В заключение, как страница открыта:

Бин создает ленивую модель данных хорошоЛенивая модель данных правильно выбирается из составного компонентаКогда datatable пытается перебрать элементы в нем, появляется ошибка: класс 'java.lang.String' не имеет свойства 'car'

Изменение<h:outputText value="#{test.car.model}"/> в<h:outputText value="#{test.class.name}"/> также java.lang.String, но на этот раз не вылетает. При отладке этого метод load () класса TestLazyDataModel никогда не вызывается.

Также, чтобы сделать это еще более странным, если я использую тот же составной компонент из любой другой xhtml-страницы, например:

<comp:testDatatable model="#{anotherBean.model}"> 

это работает отлично. Что мне не хватает? Это как-то связано с порядком рендеринга компонентов? Любая помощь высоко ценится!

Ответы на вопрос(1)

Ваш ответ на вопрос