Update datatable after deleting record

Asked

Viewed 1,255 times

0

after deleting a record in my datatable, I want it to be reloaded, I’m not getting it. Someone gives a help?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<ui:composition template="/layout/template.xhtml">
    <ui:define name="content">

        <h:form id="pesquisa" rendered="#{habilidademb.habilidade == null}">
            <p:panel header="#{msg['habilidade']}">
                <p:messages id="messages" showDetail="true" autoUpdate="true"
                    closable="true" />
                <h:panelGrid id="camposPesquisa" columns="2">
                    <h:outputLabel value="#{msg['nome']}: " />
                    <p:inputText value="#{habilidademb.arg}" />
                </h:panelGrid>
                <h:panelGrid id="botoes" columns="2" styleClass="botoesCrud">
                    <p:commandButton actionListener="#{habilidademb.pesquisar}"
                        value="#{msg['pesquisar']}" ajax="false"
                        update="cadastro,pesquisa" />
                    <p:commandButton actionListener="#{habilidademb.novo}"
                        value="#{msg['novo']}" ajax="false" update="cadastro"
                        styleClass="separadorBotoes" />
                </h:panelGrid>
                <p:dataTable id="tabela" var="linha" value="#{habilidademb.lista}"
                    paginator="true" rows="10"
                    rendered="#{not empty habilidademb.lista}" paginatorPosition="top">
                    <p:column styleClass="botoesGrid">
                        <p:commandButton icon="ui-icon-pencil"
                            action="#{habilidademb.editar(linha.id)}" process="@this"
                            update="cadastro,pesquisa" ajax="false" />
                        <p:commandButton icon="ui-icon-trash"
                            action="#{habilidademb.excluir(linha)}" ajax="true"
                            styleClass="separadorBotoes">
                            <p:confirm header="#{msg['cabecalho.apagar.registro']}"
                                message="#{msg['apagar.registro']}" icon="ui-icon-alert" />
                        </p:commandButton>
                        <p:confirmDialog global="true" showEffect="exploud"
                            hideEffect="fade">
                            <p:commandButton value="#{msg['sim']}" type="button"
                                styleClass="ui-confirmdialog-yes" icon="ui-icon-check"/>
                            <p:commandButton value="#{msg['nao']}" type="button"
                                styleClass="ui-confirmdialog-no" icon="ui-icon-close"
                                ajax="true" />
                        </p:confirmDialog>
                    </p:column>
                    <p:column headerText="#{msg['nome']}" sortBy="#{linha.nome}"
                        style="width:12%;">
                        <h:outputText value="#{linha.nome}" />
                    </p:column>
                    <p:column headerText="#{msg['descricao']}"
                        sortBy="#{linha.descricao}">
                        <h:outputText value="#{linha.descricao}" />
                    </p:column>
                    <p:column headerText="#{msg['texto.jogo']}"
                        sortBy="#{linha.textoInGame}">
                        <h:outputText value="#{linha.textoInGame}" />
                    </p:column>
                    <p:column headerText="#{msg['outo.efeito']}"
                        sortBy="#{linha.efeitoSecundario}">
                        <h:outputText value="#{linha.efeitoSecundario}" />
                    </p:column>
                    <f:facet name="footer">
                        <h:outputText
                            value="#{msg['total.registros']}: #{habilidademb.lista.size()}" />
                    </f:facet>
                </p:dataTable>
            </p:panel>
        </h:form>

        <h:form id="cadastro" rendered="#{habilidademb.habilidade != null}">
            <p:messages id="messages" showDetail="true" autoUpdate="true"
                closable="true" />
            <p:panel>
                <f:facet name="header">
                    <h:outputText
                        value="#{habilidademb.habilidade.id == null ? msg['cadastrando.habilidade'] : msg['atualizando.habilidade']}" />
                </f:facet>
                <h:panelGrid id="informacoesCadastro" columns="3">
                    <h:outputLabel value="#{msg['nome']}: " />
                    <p:inputText id="nome" value="#{habilidademb.habilidade.nome}"
                        size="20" />
                    <p:message for="nome" />
                    <h:outputLabel value="#{msg['descricao']}: " rendered="true" />
                    <p:inputTextarea id="descricao"
                        value="#{habilidademb.habilidade.descricao}" rows="6" cols="20" />
                    <p:message for="descricao" />
                    <h:outputLabel value="#{msg['texto.jogo']}: " />
                    <p:inputTextarea id="textoJogo"
                        value="#{habilidademb.habilidade.textoInGame}" rows="6" cols="20" />
                    <p:message for="textoJogo" />
                    <h:outputLabel id="efeitoS" value="#{msg['p.outro.efeito']} " />
                    <p:selectOneRadio id="hidden"
                        value="#{habilidademb.efeitoSecundario}">
                        <f:selectItem itemLabel="#{msg['sim']}" itemValue="true" />
                        <f:selectItem itemLabel="#{msg['nao']}" itemValue="false" />
                        <p:ajax event="change" update="pnlEfeito" />
                    </p:selectOneRadio>
                    <p:message for="hidden" />
                </h:panelGrid>
                <h:panelGrid id="pnlEfeito" columns="3">
                    <h:outputLabel value="#{msg['outo.efeito']}: "
                        rendered="#{habilidademb.efeitoSecundario == true or habilidademb.habilidade.efeitoSecundario != null}" />
                    <p:inputTextarea id="secundario"
                        value="#{habilidademb.habilidade.efeitoSecundario}" rows="6"
                        cols="20"
                        rendered="#{habilidademb.efeitoSecundario == true or habilidademb.habilidade.efeitoSecundario != null}" />
                    <p:message for="secundario" />
                </h:panelGrid>
                <p:commandButton action="#{habilidademb.gravar}"
                    value="#{msg['salvar']}" update="cadastro" />
                <p:commandButton action="#{habilidademb.cancelar}"
                    value="#{msg['cancelar']}" update="cadastro,pesquisa"
                    immediate="true" ajax="false" styleClass="separadorBotoes" />
                <p:commandButton actionListener="#{habilidademb.novo}"
                    value="#{msg['novo']}" ajax="false"
                    rendered="#{habilidademb.habilidade.id != null}"
                    styleClass="separadorBotoes" />
            </p:panel>
        </h:form>

And the controller:

package br.com.pokemax.controle;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

import br.com.pokemax.modelo.Habilidade;
import br.com.pokemax.negocio.HabilidadeDAO;
import br.com.pokemax.util.Mensagens;

@ViewScoped
@ManagedBean(name = "habilidademb")
public class ControleHabilidade implements Serializable {

    private static final long serialVersionUID = 1L;

    private Habilidade habilidade;

    @Inject
    private HabilidadeDAO dao;

    private Boolean efeitoSecundario;

    private List<Habilidade> lista;

    private String arg;

    @PostConstruct
    public void inicio() {

    }

    public void novo() {
        habilidade = new Habilidade();

        /*
         * if (habilidade == null) { habilidade = new Habilidade(); } else {
         * habilidade = null; habilidade = new Habilidade(); }
         */
    }

    public void gravar() {
        try {
            if (habilidade.getId() == null) {
                dao.insert(habilidade);
                Mensagens.sucesso("Habilidade " + habilidade.getNome() + " cadastrado(a) com sucesso!");
                habilidade = new Habilidade();
            } else {
                dao.update(habilidade);
                Mensagens.sucesso("Habilidade " + habilidade.getNome() + " atualizado(a) com sucesso!");
                lista = dao.findByName(arg);
            }

        } catch (Exception e) {
            Mensagens.erro(e.getMessage());
            return;
        }

    }

    public void pesquisar() {
        try {
            if (arg.isEmpty()) {
                lista = dao.findAll();
            } else {
                lista = dao.findByName(arg);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void excluir(Habilidade h) {
        try {
            dao.delete(h);
            Mensagens.sucesso("Habilidade " + h.getNome() + " deletado(a) com sucesso!");
            pesquisar();
        } catch (Exception e) {
            Mensagens.erro(e.getMessage());
        }
    }

    public void editar(Long id) {
        try {
            setHabilidade(dao.find(id));
        } catch (Exception e) {
            Mensagens.erro(e.getMessage());
        }

    }

    public void cancelar() {
        habilidade = null;

    }

    public String navegar(String pagina) {
        return pagina;
    }

    public String getArg() {
        return arg;
    }

    public void setArg(String arg) {
        this.arg = arg;
    }

    public List<Habilidade> getLista() {
        return lista;
    }

    public void setLista(List<Habilidade> lista) {
        this.lista = lista;
    }

    public Habilidade getHabilidade() {
        return habilidade;
    }

    public void setHabilidade(Habilidade habilidade) {
        this.habilidade = habilidade;
    }

    public Boolean getEfeitoSecundario() {
        return efeitoSecundario;
    }

    public void setEfeitoSecundario(Boolean efeitoSecundario) {
        this.efeitoSecundario = efeitoSecundario;
    }

}
        </ui:define>
    </ui:composition>
    </html>

2 answers

3

Just put inside the p:commandButton the attribute update="tabela". Use the process is unnecessary since the element is being passed by parameter to the method, it is best to use actionListener instead of action. This will optimize response time and network traffic.

  • Thanks, with the actionListner it didn’t function.

  • I agree on the process, but use actionListener in this case is wrong. See that he wants to run a business logic inside the Managed bean, which is the exclusion of a skill dao.delete(h);. When we wish to execute a business logic or browse between pages we should use action. Whereas the actionListener is more related to run a view related logic, such as an action to clear the form or else trigger an action before a business logic. Remembering that with actionListener cannot use navigation.

  • True Sandro, I was wrong about the actionLister. I gave this option because in this case there was no need for navigation and the method excluir era void. But your argument is correct. VLW for correction.

2


In the p:commandButton that calls the action of deleting you forgot to put process="@this" update="pesquisa"

  • Worked, show!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.