Tenho uma página com um form onde insere dados em uma tabela e logo abaixo outro form com um rich:dataTable onde aparece esses registros. Na frente de cada registro há o botão excluir. Quando faço uma inserção o form com o dataTable é redesenhado e aparece o registro, porém quando clico no excluir, o form com o dataTable não é redesenhado. Meu projeto usa Facelets, Seam e RichFaces. Segue o código:
Página:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:rich="http://richfaces.org/rich"
xmlns:a="http://richfaces.org/a4j"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
template="./../layout/template.xhtml">
<ui:define name="body">
<h:form>
<s:validateAll>
<f:facet name="arroundInvalidField">
<s:span styleClass="errors"/>
</f:facet>
<f:facet name="afterInvalidField">
<s:message showSummary="true" showDetail="false"/>
</f:facet>
<h:panelGroup id="palavraForm">
Palavra<s:decorate>
<h:inputText value="#{verbeteAction.verbete.palavra}"/>
</s:decorate>
Definicao<s:decorate>
<h:inputText value="#{verbeteAction.verbete.definicao}"/>
</s:decorate>
</h:panelGroup>
<a4j:commandButton id="salvar" value="Salvar"
action="#{verbeteAction.salvarVerbete}"
reRender="palavraForm, listaForm" limitToList="false"/>
<a4j:region>
<a4j:commandButton id="nova" value="Nova"
action="#{verbeteAction.novaPalavra}"
reRender="palavraForm" limitToList="false"/>
</a4j:region>
</s:validateAll>
</h:form>
<h:form id="listaForm" prependId="false">
<rich:dataTable value="#{verbetes}"
var="plvr" id="ListaPalavra">
<rich:column>
<f:facet name="header">
<h:outputText value="id"/>
</f:facet>
<h:outputText value="#{plvr.id}"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="palavra"/>
</f:facet>
<h:outputText value="#{plvr.palavra}"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Ação"/>
</f:facet>
<s:button id="ex" value="Excluir" action="#{verbeteAction.excluirVerbete}">
<a:support event="onblur" reRender="listaForm" ajaxSingle="true" />
</s:button>
</rich:column>
</rich:dataTable>
</h:form>
</ui:define>
</ui:composition>
Action:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fachada;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.faces.FacesMessages;
import persistencia.Verbete;
/**
*
* @author Samuel
*/
@Name("verbeteAction")
@Scope(ScopeType.CONVERSATION)
public class VerbeteAction {
private Verbete verbete = new Verbete();
@In
private Session seamDataBase;
@DataModel
private List<Verbete> verbetes;
@DataModelSelection("verbetes")
private Verbete verbeteSelecionado;
public VerbeteAction() {
}
public Verbete getVerbete() {
return verbete;
}
public void setVerbete(Verbete verbete) {
this.verbete = verbete;
}
@Factory("verbetes")
public void verbetes() {
verbetes = seamDataBase.getNamedQuery("listar").list();
}
public Verbete getVerbeteSelecionado() {
return verbeteSelecionado;
}
public void setVerbeteSelecionado(Verbete verbeteSelecionado) {
this.verbeteSelecionado = verbeteSelecionado;
}
public String salvarVerbete() {
if (validarPalavra()) {
seamDataBase.saveOrUpdate(verbete);
return "verbeteCadastrado";
}
return "verbeteExistente";
}
public void editarVerbete() {
verbete = verbeteSelecionado;
}
public void excluirVerbete() {
seamDataBase.delete(seamDataBase.merge(verbeteSelecionado));
System.out.println("excluiu");
}
public void novaPalavra() {
verbete = new Verbete();
}
}