Je travaille avec un tableau de bord dynamique où les utilisateurs peuvent épingler et supprimer des éléments comme ils le souhaitent. J'ai maintenant un problème : je veux ajouter un composant composite existant à la vue depuis le backing bean. J'ai essayé de trouver la bonne façon de le faire sur Internet, mais sans succès jusqu'à présent. Voici le composant composite simple que je veux ajouter :
<?xml version='1.0' encoding='UTF-8' ?>
<!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:cc="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:composite="http://java.sun.com/jsf/composite">
<!-- INTERFACE -->
<cc:interface>
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<h:outputText value="TEST"/>
</cc:implementation>
</html>
Voici le code qui devrait renvoyer le composant composite :
public static UIComponent getCompositeComponent(String xhtml, String namespace) {
FacesContext fc = FacesContext.getCurrentInstance();
Application app = fc.getApplication();
Resource componentResource = app.getResourceHandler().createResource(xhtml, namespace);
UIPanel facet = (UIPanel) app.createComponent(UIPanel.COMPONENT_TYPE);
facet.setRendererType("javax.faces.Group");
UIComponent composite = app.createComponent(fc, componentResource);
composite.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, facet);
return composite;
}
Et voici comment j'utilise la fonction :
Column column = new Column();
UIComponent test = HtmlUtil.getCompositeComponent("test.xhtml", "comp");
column.getChildren().add(test);
Mais rien n'est rendu à l'intérieur de la colonne. Avez-vous une idée de la façon dont cela pourrait être fait ? Je ne veux pas utiliser la méthode rendered="#{bean.isThisRendered}" car elle ne correspond pas à mon cas d'utilisation.