5
In realtà sto provando a creare un componente tabella composito personalizzato perché h: datatable o p: datatable non soddisfano le mie esigenze. Tuttavia deve essere usato come un primimetro datatable. Dopo aver trovato JSF composite component childrens e Expose items of a list while iterating within composite component ho visto il traguardo, ma ora mi sono bloccato.utilizzando insertChildren E ottenere attributi figlio
mio xhtml:
<h:body>
<sm:datatable mode="columntoggle" id="mytable" value="#{managerBean.objects}" var="object">
<sm:column header="KeyHeader" property="key">
<h:outputText value="#{object.key}"/>
</sm:column>
<sm:column header="ValueHeader" property="value">
<h:outputText value="#{object.value}"/>
</sm:column>
</sm:datatable>
</h:body>
E questo è il composito datatable:
<cc:interface>
<cc:attribute name="id" />
<cc:attribute name="mode" />
<cc:attribute name="var" />
<cc:attribute name="value" type="java.util.List"/>
</cc:interface>
<cc:implementation>
<table data-role="table" data-mode="#{cc.attrs.mode}" id="my-table">
<thead>
<tr>
<ui:repeat value="#{component.getCompositeComponentParent(component).children}" var="child">
<th>
<h:outputText value="#{child.attrs.header}"/>
</th>
</ui:repeat>
</tr>
</thead>
<tbody>
<ui:repeat value="#{cc.attrs.value}" var="object">
<tr>
<c:forEach items="#{cc.children}" var="child" varStatus="loop">
<cc:insertChildren/>
</c:forEach>
</tr>
</ui:repeat>
</tbody>
</table>
</cc:implementation>
E questo è il colonna composta
<cc:interface>
<cc:attribute name="header" />
<cc:attribute name="property" />
<cc:facet name="content"/>
</cc:interface>
<cc:implementation>
<td><cc:insertChildren/></td>
</cc:implementation>
thead funziona in modo indipendente
tbody funziona in modo indipendente
Metterli insieme come sopra ho solo tbody. thead rimane sempre vuoto Qualche suggerimento? Grazie per il tuo aiuto in Advance!
'
risposta
#{cc.children}
che equivale a#{component.getCompositeComponentParent(component).children}
dovrebbero lavorare sia ma per qualche ragione non funzionare in alcune versioni, immagino questa parte del JSF è ancora poco buggy.Hai provato
fare riferimento questa discussione pure,
In JSF2, how to know if composite component has children?
fonte
2013-03-07 03:44:56
Ho appena provato ma non funziona davvero. solo child è l'implementazione stessa. Pertanto l'output per _ # {child} _ è _
ho avuto lo stesso problema. La mia soluzione alternativa era utilizzare un
renderFacet
, anzichéinsertChildren
.Per iterare sugli elementi inseriti che ho utilizzato:
#{cc.facets.yourFacetName.children}
e per inserire gli elementi stessi che ho usato:<composite:renderFacet name="yourFacetName"/>
.fonte
2013-03-22 15:00:03
Ho trovato iterando sui bambini e utilizzando
<composite:insertChildren />
nello stesso componente per essere quasi impossibile. Almeno nell'implementazione di Mojarra 2.2.6.Anche l'approccio a facce intermedie non ha funzionato.
Alla fine, la mia soluzione era quella di:
encodeAll()
in il componente facce corrispondente al componente padreQuesta domanda ha più di un anno. Si prega di condividere se c'è una soluzione più semplice in vista.
fonte
2014-12-10 12:12:45
Questo non è un bug, in realtà funziona come progettato in mojarra. L'utilizzo di cc: insertChildren sposta i figli nel tag principale del tag cc: insertChildren. Questo problema è equivalente a un altro problema e ha la stessa soluzione. Vedere la mia risposta allo this question.
Fondamentalmente, si inserisce uno
<ui:fragment>
attorno allo<cc:insertChildren>
, associare tale frammento a una proprietà in un bean FacesComponent.fonte
2015-07-24 20:51:25
Problemi correlati