Sto lavorando con un dashboard dinamico in cui gli utenti possono bloccare e rimuovere gli articoli come preferiscono. Ora ho un problema che voglio aggiungere il componente composito esistente alla vista dal backing bean. Ho cercato di trovare il modo corretto per farlo da Internet, ma finora non ha avuto successo. Ecco la semplice componente composito voglio aggiungere:Creare e aggiungere programmaticamente un componente composito nel bean di supporto
<?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>
Ecco il codice che dovrebbe restituire la componente composito:
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;
}
Ed ecco come sto usando la funzione:
Column column = new Column();
UIComponent test = HtmlUtil.getCompositeComponent("test.xhtml", "comp");
column.getChildren().add(test);
Ma non viene eseguito il rendering all'interno della colonna. Qualche idea su come questo potrebbe essere fatto? Non voglio seguire il metodo rendered = "# {bean.isThisRendered}" perché non si adatta al mio caso d'uso.
Fuori di interesse (l'argomento è terribilmente male coperto e questo mi avrebbe portato anni avanti luce): Da dove si invocando la 3-liner chiama 'HtmlUtil.getCompositeComponent'? –