Перенос составного компонента в пользовательский компонент
Я должен перенести составной компонент в пользовательский компонент. Этот пример довольно упрощен, но демонстрирует проблему: дочерние элементы моего компонента (my:test
) должны быть представлены в другом компоненте. Композит my:testC
в качестве примера, который я не хочу использовать, будет выглядеть так
<composite:implementation>
<p:panel>
<composite:insertChildren/>
</p:panel>
</composite:implementation>
Очевидно (по крайней мере, я надеюсь, что я правильно с этим предположением) я не могу просто сделать p:panel
в encodeBegin
,
@FacesComponent("test")
public class Test extends UIPanel
{
@Override
public void encodeBegin(FacesContext context) throws IOException
{
// ??
}
@Override
public void encodeEnd(FacesContext context) throws IOException
{
// ??
}
}
Я хочу использовать my:test
таким образом:
<my:test>
<h:outputText value="some Text"/>
</my:test>
Вывод должен быть таким же, как при использовании my:testC
: некоторый текст отображается на панели PrimeFaces. Как я могу кодировать использование p:panel
в моем классе Java?
1 ответ
Вы правильно это заметили. Вы не можете просто отобразить "p: панель" или любую другую разметку jsf в пользовательском компоненте.
Что вы можете сделать, однако:
Создайте подкомпоненты с помощью экземпляра приложения, добавьте его в качестве аспекта или дочернего элемента в свой пользовательский компонент, а затем вызовите кодирование для него в своем собственном рендерере.
Прямой рендеринг HTML
Используйте API Facelet, который должен быть доступен в текущем JSF (я никогда не работал с этим)
Используйте любую другую обработку шаблона, такую как скорость или freemarker, для рендеринга HTML.