На самом деле я пытаюсь создать собственный компонент составной таблицы, потому что h: datatable или p: datatable не соответствуют моим потребностям. Тем не менее, он должен использоваться как таблица данных простых лиц. После того, как я нашел дочерние составные компоненты JSF и Отображение элементов списка при повторении внутри составного компонента Я видел финишную черту, но теперь я получил застрявший.
Мой 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>
А это композит с данными:
<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>
А это композитный столбец.
<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 работает автономно
tbody работает автономно
Собрав их вместе, как указано выше, я получаю только tbody. thead всегда остается пустым Любые предложения? Заранее спасибо за помощь!
<table id="my-table
— обход пространства имен идентификатора JSF. В общем: не делайте этого - вы должны устанавливать идентификаторы только для компонентов JSF, а не для основных тегов HTML. В этом случае в составном компоненте у вас должен быть базовый HTML-тег верхнего уровня, но его идентификатор должен быть равен#{cc.clientId}
. Таким образом,update="your_comp"
будет работать. - person Vsevolod Golovanov   schedule 26.05.2017