Hi,
I have been trying to achieve this functionality of expand/collapse of table rows using core JSF and also I have to preserve the sorting. Is there a way in core JSF where I can achieve this functionality?
Hi,
I have been trying to achieve this functionality of expand/collapse of table rows using core JSF and also I have to preserve the sorting. Is there a way in core JSF where I can achieve this functionality?
I don't think you can do this with 'core' JSF (by which I assume you mean using only the reference implementation).
As I understand it, you can accomplish subtables with RichFaces subTable
You can also do a similar thing with IceFaces - see the component showcase (it's under Table -> Expandable Table). However either of these would require you adding and setting up another library (RichFaces or IceFaces) which is probably not what you want.
If you insist in using reference implementation only, then you can't go around using a nested h:dataTable
and/or h:panelGroup
and a good shot of CSS to get it aligned nicely. You can then use JavaScript the smart way to show/hide row details.
Here's a basic kickoff example:
<h:dataTable value="#{bean.orders}" var="order">
<h:column>
<h:panelGrid columns="3">
<h:graphicImage id="expand" value="expand.gif" onclick="toggleDetails(this);" />
<h:outputText value="#{order.id}" />
<h:outputText value="#{order.name}" />
</h:panelGrid>
<h:dataTable id="details" value="#{order.details}" var="detail" style="display: none;">
<h:column><h:outputText value="#{detail.date}" /></h:column>
<h:column><h:outputText value="#{detail.description}" /></h:column>
<h:column><h:outputText value="#{detail.quantity}" /></h:column>
</h:dataTable>
</h:column>
</h:dataTable>
The toggleDetails()
function can look like (note that it takes JSF generated client ID into account):
function toggleDetails(image) {
var detailsId = image.id.substring(0, image.id.lastIndexOf(':')) + ':details';
var details = document.getElementById(detailsId);
if (details.style.display == 'none') {
details.style.display = 'block';
image.src = 'collapse.gif';
} else {
details.style.display = 'none';
image.src = 'expand.gif';
}
}
Simple expandable table with RichFaces
We can do Simple expandable table with RichFaces and the code is given below...
Wonder Location Image