Comment créer un composant composite pour une colonne datatable?
Compte tenu de cette datatable (naturellement de travail):
<rich:dataTable var="var" value="#{values}">
<rich:column>
<f:facet name="header">
HEADER
</f:facet>
<h:outputText value="#{var}" />
</rich:column>
</rich:dataTable>
Si je définir un composant personnalisé (également ok dans la syntaxe et au bon endroit, à la rubrique ressources/composants):
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:composite="http://java.sun.com/jsf/composite">
<!-- INTERFACE -->
<composite:interface>
<composite:attribute name="val" />
</composite:interface>
<!-- IMPLEMENTATION -->
<composite:implementation>
<rich:column>
<f:facet name="header">
HEADER
</f:facet>
<h:outputText value="#{cc.attrs.val}" />
</rich:column>
</composite:implementation>
</html>
Pourquoi le code suivant ne fonctionne pas?
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition template="/WEB-INF/templates/default.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:my="http://java.sun.com/jsf/composite/components">
<ui:define name="content">
<rich:dataTable var="var" value="#{values}">
<my:mycolumn val="#{var}"/>
</rich:dataTable>
</ui:define>
</ui:composition>
Savez-vous comment pourrais-je le faire fonctionner (j'en veux pour définir mon propre colonne et enregistrer le code)? Merci beaucoup! Bye
source d'informationauteur Federico
Vous devez vous connecter pour publier un commentaire.
La
<my:mycolumn>
élément doit être une instance deUIColumn
comme c'est le seulement enfant valide d'unUIData
composant pendant le rendu de la réponse de phase. Tous les autresUIComponent
types seront ignorés, donc pas rendus. Un composant composite est implicitement unUINamingContaner
composant, ce qui n'est pas unUIColumn
et donc ignoré.Un PrimeFaces
<p:dataTable>
avec un support en composant qui s'étendUIColumn
aussi de ne pas travailler en raison de la mauvaise cycle de vie d'un composant composite. La colonne doit être créé lors de l'affichage de temps de construction, tandis que le composite, composante du corps est créé lors de l'affichage de temps de rendu.La solution est de créer un fichier de balises au lieu de cela, ce qui signifie un supplément de
.taglib.xml
fichier, mais il fonctionne parfaitement./WEB-INF/tags/column.xhtml
:/WEB-INF/my.taglib.xml
:Remarque: Le
<attribute>
les inscriptions ne sont pas obligatoires, mais sont agréables à des fins de documentation, telles que générées docs et IDE de saisie semi-automatique./WEB-INF/web.xml
:Utilisation: