Olá Pessoal! :lol:
Essa eu mando para as Feras do JSF,
Estou com um problema de re-renderização no JSF. Especificamente no componete do RichFaces DataTable.
Desde já fico extremamente grato, se alguém puder ajudar.
Em uma app JavaEE com JSF 1.2. e Richfaces, tenho um rich:dataTable, com 2 a4j:commandLinks que se recusam a serem re-renderizados, depois de alterados:
<a4j:form id="fTaskListForm" ajaxSubmit="true">
<rich:dataTable id="dtPendingTasks" value="#{taskListingHandler.pendingTasksByUser}" var="dti" rows="11"
styleClass="top" rendered="#{not empty taskListingHandler.pendingTasksByUser}" columnsWidth="0*,245px,245px,0*,0*,50,0*"
rowClasses="tableRows" style="text-align:center;" ajaxKeys="#{taskListingHandler.pendingTasksByUser}">
<f:facet name="header">
<rich:columnGroup>
<!-- Richfaces Columns do cabeçalho ... -->
</rich:columnGroup>
</f:facet>
<!-- mais Richfaces Columns... -->
<!-- Coluna título -->
<rich:column id="cTitle" >
<div align="left">
<a4j:commandLink id="updateTaskTitleLink" actionListener="#{editingHandler.catchTaskEditingInfo}">
<h:outputText value="#{dti.title}"/>
<f:attribute name="taskId" value="#{dti.taskId}"></f:attribute>
<f:attribute name="editingField" value="task.title"></f:attribute>
<rich:componentControl for="mpTaskEditingPanel" attachTo="updateTaskTitleLink" operation="show" event="onclick"/>
</a4j:commandLink>
</div>
</rich:column>
<!-- Coluna descrição -->
<rich:column id="cDescription" >
<div align="center">
<a4j:commandLink id="updateTaskDescriptionLink" actionListener="#{editingHandler.catchTaskEditingInfo}" style="color:#686868;font-style:normal;text-decoration:none;">
<h:outputText value="#{dti.description}" style="color:#1b1b1b;font-style:normal;font-size:x-small;" />
<f:attribute name="taskId" value="#{dti.taskId}"></f:attribute>
<f:attribute name="editingField" value="task.description"></f:attribute>
<rich:componentControl for="mpTaskEditingPanel" attachTo="updateTaskDescriptionLink" operation="show" event="onclick"/>
</a4j:commandLink>
</div>
</rich:column>
<!-- outras Richfaces Columns... -->
</rich:dataTable>
</a4j:form>
Quando o usuário clica no CommandLink, ele abre um ModalPanel de alteração (que não está dentro de nenhum form), para este sete o novo valor para alteração:
<!-- Modal Panel for editing Task -->
<rich:modalPanel id="mpTaskEditingPanel" width="285" height="80"
left="400" top="400" resizeable="false">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Alterar"></h:outputText>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/img/icons/10x10/symbols_delete-icon_10x10.png" styleClass="hidelink" id="hidelink3" />
<rich:componentControl for="rmp_taskEditPanel" attachTo="hidelink3" operation="hide" event="onclick" />
</h:panelGroup>
</f:facet>
<a4j:form id="formTaskEditPanel" ajaxSubmit="true">
<h:outputLabel value="Novo valor: " />
<h:inputText id="itNewValue" value="#{editingHandler.taskec.newValue}" />
<a4j:commandButton id="taskEditFormSubmit" value="Alterar" actionListener="#{editingHandler.updateTask}"
reRender="updateTaskDescriptionLink,updateTaskTitleLink,fTaskListForm,dtPendingTasks"/>
<rich:componentControl for="mpTaskEditingPanel" attachTo="taskEditFormSubmit" operation="hide" event="onclick" />
</a4j:form>
</rich:modalPanel>
No submit do CommandButton, mando re-renderizar o DataTable e os CommandLinks, entretanto estes não são re-renderizados:
reRender=“updateTaskDescriptionLink,updateTaskTitleLink,fTaskListForm,dtPendingTasks”.
Além disso:
- Após o submit, checo no Banco e as alterações são processadas, o problema é só na re-renderização;
- Meu metodo update chama a listagem que alimenta o DataTable logo após a alteração no banco (taskListingHandler.pendingTasksByUser). Logo no RestoreView, a listagem está atualizada;
Novamente agradeço de coração,
Muito Sucesso!