Estou fazendo um sistema utilizando a biblioteca RichFaces pois foi a melhor lib ajax que encontrei até agora para jsf. Bom, estou tentando fazer um sistema que tem um layout padrão, mas que so modifica o conteúdo central, ou seja, o cabeçalho e o menu esquerdo ficam inalterados durando a interação do usuario e o sistema. Já fiz este tipo de aplicação utilizando ajax normal sem jsf, mas agora com o RichFaces, estou tentando implementar este tipo de recurso.
Desenvolvi o seguinte layout:
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td id="topo" colspan="2">
<img src="resources/img/logo.png"/>
</td>
</tr>
<tr>
<td colspan="2" id="toolbar">
<div class="tool-page"><a href="javascript:void(null);">Janela 1</a></div>
<div class="tool-page"><a href="javascript:void(null);">Janela 2</a></div>
<div class="tool-page"><a href="javascript:void(null);">Janela 3</a></div>
<div class="tool-page_selected"><a href="javascript:void(null);">Janela 4</a></div>
<div class="tool-page"><a href="javascript:void(null);">Janela 5</a></div>
</td>
</tr>
<tr>
<td id="menu" valign="top">
<h:form>
<rich:panelBar height="480px" width="300px" contentStyle="padding:0px">
<rich:panelBarItem label="Sites">
<rich:tree style="width:200px" value="#{treeNodeCms.data}" var="item" nodeFace="#{item.type}">
<rich:treeNode type="site" iconLeaf="resources/img/sites.png" icon="resources/img/sites.png">
<a4j:commandLink value="#{item.name}" reRender="content" eventsQueue="foo2">
<a4j:actionparam name="link" value="/content_list.xhtml" assignTo="#{linkBean.link}"/>
<a4j:actionparam name="oidSite" value="#{item.site.oid}" assignTo="#{contentListSite.oidSite}"/>
</a4j:commandLink>
</rich:treeNode>
<rich:treeNode type="page" iconLeaf="resources/img/page.png" icon="resources/img/page.png" reRender="inc">
<h:outputText value="#{item.name}" />
</rich:treeNode>
<rich:treeNode type="directory" iconLeaf="resources/img/folder.gif" icon="resources/img/folder.gif" reRender="content">
<a4j:commandLink value="#{item.name}" reRender="content">
<a4j:actionparam name="link" value="/content_list.xhtml" assignTo="#{linkBean.link}"/>
</a4j:commandLink>
</rich:treeNode>
</rich:tree>
</rich:panelBarItem>
<rich:panelBarItem label="Gerenciador de Arquivos">
</rich:panelBarItem>
<rich:panelBarItem label="Serviços">
</rich:panelBarItem>
<rich:panelBarItem label="Configurações">
</rich:panelBarItem>
</rich:panelBar>
</h:form>
</td>
<td valign="top" style="padding:5px">
<h:form>
<a4j:include viewId="#{linkBean.link}" id="content"/>
</h:form>
</td>
</tr>
</table>
O <a4j:include viewId="#{linkBean.link}" id=“content”/> funcionou legal, toda vez que eu clico no link, altero o LinkBean.link, e mando fazer um reRender do include (content), e o include é renderizado corretamente, alterando para uma nova página, só que tem um porem, se a nova página tem um dataTable, com rich:datascroller, ou qualquer coisa parecida, a página incluida não funciona, o datascroller nao faz a paginação, e qualquer recurso ajax que a nova página tenha, não funciona.
Alguém poderia me ajudar? O Include já funciona, mas a página que é incluida não funciona como tem que ser, senão vou ter que colocar um iframe pra poder funcionar, mas aí perde a graça, pois a página incluida não vai poder interagir com a treeview e o menu acima.
A outra página incluída tem um código como esse, mas o rich:datascroller não funciona.
<rich:dataTable id="table" value="#{contentListSite.content}" var="lista" width="100%" rows="4">
<f:facet name="header">
<h:outputText value="#{contentListSite.title}" />
</f:facet>
<f:facet name="footer">
<rich:datascroller for="table" maxPages="4">
<a4j:actionparam name="oidSite" value="#{contentListSite.oidSite}" assignTo="#{contentListSite.oidSite}"/>
</rich:datascroller>
</f:facet>
<rich:column width="2%">
<f:facet name="header">
<h:outputText value="" />
</f:facet>
<h:graphicImage value="#{lista.icon}"/>
</rich:column>
<rich:column headerClass="colunaLeft" sortable="true">
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{lista.name}" />
</rich:column>
<rich:column headerClass="colunaLeft" sortable="true">
<f:facet name="header">
<h:outputText value="Tipo" />
</f:facet>
<h:outputText value="#{lista.type}" />
</rich:column>
<rich:column headerClass="colunaLeft" sortable="true">
<f:facet name="header">
<h:outputText value="Data de Modificação" />
</f:facet>
<h:outputText value="" />
</rich:column>
</rich:dataTable>