1
I have a problem in Auto update @form of primefaces, it should automatically update the datatable but is not working.
Below is JSF and managedBean.
Thank you!
Products
<h:form>
<p:toolbar>
<p:toolbarGroup>
<p:commandButton value="Adicionar" action="#{produtoBean.adicionar()}" update="@form"></p:commandButton>
<p:commandButton value="Atualizar" action="#{produtoBean.listar()}" update="@form"></p:commandButton>
</p:toolbarGroup>
</p:toolbar>
<p:messages autoUpdate="true" showDetail="true"></p:messages>
<p:fieldset legend="Produtos">
<p:panelGrid columns="2">
<h:outputLabel value="Código:"></h:outputLabel>
<p:inputText value="#{produtoBean.produto.codigo}"></p:inputText>
<h:outputLabel value="Quantidade:"></h:outputLabel>
<p:inputMask mask="9?9999999" value="#{produtoBean.produto.quantidade}" placeHolder=""></p:inputMask>
<h:outputLabel value="Descrição:"></h:outputLabel>
<p:inputText value="#{produtoBean.produto.descricao}"></p:inputText>
</p:panelGrid>
<p:dataTable value="#{produtoBean.produtos}" var="produto">
<p:column headerText="Código" sortBy="#{produto.codigo}">
<h:outputText value="#{produto.codigo}"></h:outputText>
</p:column>
<p:column headerText="Quantidade" sortBy="#{produto.quantidade}">
<h:outputText value="#{produto.quantidade}"></h:outputText>
</p:column>
<p:column headerText="Descrição" sortBy="#{produto.descricao}">
<h:outputText value="#{produto.descricao}"></h:outputText>
</p:column>
<p:column>
<p:commandButton value="Editar" action="#{produtoBean.editar(produto)}" update="@form" ></p:commandButton>
</p:column>
<p:column>
<p:commandButton value="Deletar" action="#{produtoBean.deletar(produto)}" update="@form" ></p:commandButton>
</p:column>
</p:dataTable>
</p:fieldset>
</h:form>
package bean;
import controller.ProdutoDAO;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import model.Produto;
import util.ErroSistema;
@ManagedBean
@SessionScoped
public class ProdutoBean {
private Produto produto = new Produto();
private List<Produto> produtos = new ArrayList<>();
public ProdutoDAO produtoDAO = new ProdutoDAO();
public void adicionar(){
try {
produtoDAO.salvar(produto);
produto = new Produto();
adicionarMensagem("Produto", "salvo com sucesso!", FacesMessage.SEVERITY_INFO);
} catch (ErroSistema ex) {
adicionarMensagem(ex.getMessage(), ex.getCause().getMessage(), FacesMessage.SEVERITY_ERROR);
}
}
public void listar(){
try {
produtos = produtoDAO.buscar();
if(produtos == null || produtos.isEmpty()){
adicionarMensagem("Nenhum dado encontrado!", "Sua busca não retornou nenhum dado!", FacesMessage.SEVERITY_WARN);
}
} catch (ErroSistema ex) {
adicionarMensagem(ex.getMessage(), ex.getCause().getMessage(), FacesMessage.SEVERITY_ERROR);
}
}
public void editar(Produto c){
produto = c;
}
public void deletar(Produto c){
try {
produtoDAO.deletar(c.getId());
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Produto", "deletado com sucesso!") );
} catch (ErroSistema ex) {
adicionarMensagem(ex.getMessage(), ex.getCause().getMessage(), FacesMessage.SEVERITY_ERROR);
}
}
public void adicionarMensagem(String sumario, String detalhe, FacesMessage.Severity tipoErro){
FacesContext context = FacesContext.getCurrentInstance();
FacesMessage message = new FacesMessage(tipoErro, sumario, detalhe);
context.addMessage(null, message);
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public List<Produto> getProdutos() {
return produtos;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
}
It may not be that, but instead of using
action
in the commandButtons, useactionListener
. Theaction
serves only for when the Managedbean method returns a String (to redirect).– igventurelli