динамическийне работает - PullRequest
0 голосов
/ 21 апреля 2011

Я хочу использовать динамический интерфейс: включите, вот так.

<ui:repeat value="#{FormsService.getTemplates(component.form)}"
                var="template">
    <ui:include src="forms/#{template.id}.xhtml"/>
</ui:repeat>

Каким-то образом это всегда приводит к включению "forms / .xhtml", как будто # [template.id} будет пустым. Но я знаю, что # {template.id} не пустой. То есть просто распечатав это, я получу ожидаемое значение. Так что здесь не так? Любая помощь приветствуется.

1 Ответ

1 голос
/ 22 апреля 2011

Эти теги несколько сбивают с толку, поскольку реализован как UIComponent, а логика находится в TagHandler. При построении дерева компонентов, например, на этапе restoreView, добавляется один компонент UIRepeat, но # {template.id} не будет оцениваться должным образом. Он не будет оцениваться, потому что переменная UIRepeat "template" будет доступна только во время обработки компонента, а не во время построения дерева.

У вас есть два варианта. Во-первых, вы можете использовать вместо . Это простое решение и, вероятно, будет хорошо работать для вас. В этом есть один минус: если у вас есть несколько экземпляров одного и того же шаблона, дерево компонентов будет содержать отдельную копию компонентов шаблона для каждого экземпляра. Как следствие, производительность памяти и процессора пострадает.

Другой вариант - использовать настоящий компонент динамического включения. К сожалению, я не нашел ни одного доступного. Мне удалось реализовать такой компонент, но это не очень удобное решение, поскольку для него также требуется слегка измененная версия UIRepeat. Мы должны были пойти на этот подход, потому что потеря производительности из была слишком большой для нас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...