Problemas em aplicar evento para um linha específica de uma datatable

4 respostas
gustavoRamos

Olá a todos. estou desenvolvendo uma aplicação de cadastros (CRUD) onde esta é uma página web que possui uma datatable que para cada cadastro que eu faça a mesma datatable aumenta uma linha ( :open_mouth: ). Mas há um problema: o que eu quero é cadastrar e na hora que aparacer na tabela tenha uma coluna que tenha um botão de exclusão (para excluir o cadastro, tipo um iconezinho de uma lixeira sabe?). nessa parte travei. não consigo fazer tal evento funcionar.

estou usando o framework icefaces (que é semelhante ao JSF), portanto quem souber de icefaces , JSF ou somente souber a resposta peço encarecidamente por ajuda. :slight_smile:

OBS: tenho já um Managed Bean e um método de exclusão do banco de dados que já testei e sei que funciona.

desde já, obrigado.
[]s

4 Respostas

wbdsjunior

Olá!

Não sei se isso ajuda, mas uso o Tomahawk e faço assim:

managed bean:
public class PessoaMB {
    private Pessoa pessoa = new Pessoa(); // você precisa ter um atributo de classe

    ...

    public void deleta(ActionEvent event) {
        PessoaDAO pessoaDAO = new PessoaDAO();
        pessoaDAO.delete(pessoa); // aqui você pega o atributo de classe que foi atualizado pelo t:updateActionListener
    }
}
jsp:
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk" %>

...

<h:column>
    <h:commandButton value="Deletar" actionListener="#{pessoaMB.deleta}">
        <t:updateActionListener value="#{pessoa}" property="#{pessoaMB.pessoa}" /> // aqui o atributo de classe é atualizado com o ojeto da linha do dataTable
    </h:commandButton>
</h:column>
gustavoRamos

Sefo, ali onde chama o método de exclusão do bean tem aquele ‘(_obj)’.

isso seria o parâmetro do método, correto? que no caso, é o dado que foi escolhido para ser excluído. Estou certo?

se boto funcionar minha aplicação dá um erro, e nem abre a página, e o erro é nessa chamada.

minha página:

<f:view>
    <ice:outputHtml>        
        <ice:outputHead>
            <title>Cadastros - Fabricante</title>            
            <ice:outputStyle href="./xmlhttp/css/xp/xp.css"/>
        </ice:outputHead>
<ice:outputBody style="background-color:white;">  
            <div id="tudo">
                <ice:form id="geral" >
                    <div id="image"><ice:graphicImage url="img/logo.jpg"  alt="Gtmed"></ice:graphicImage></div>
                    <div id="title"><h3><ice:outputLabel style="color: white;" value="Escolha o item que você deseja Cadastrar:"/></h3><br><br></div>
                    <hr><ice:menuBar id="menu">
                        <ice:menuItem id="fabricante" value=" Fabricante " action="Fabricante.jsp"/>
                        <ice:menuItem value=" Distribuidor "/>
                        <ice:menuItem value=" Outro "/>
                        <ice:menuItem value=" Mais outro aqui "/>
                    </ice:menuBar><br><br><hr>                    
                </ice:form> 
                <ice:form id="main">                
                    <div id="cadastro"> 
                        <ice:outputLabel value="Nome:"/><ice:inputText value="#{FabricanteBean.f.nomeFabricante}" /><br><br>
                        <ice:commandButton value="Cadastrar fabricante" action="#{FabricanteBean.addFabricante}"></ice:commandButton>
                    </div>
                    <div id="tabela"> 
                        Fabricantes:<br>
                        <ice:dataTable value="#{FabricanteBean.fabricantes}" var="item">
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText  value="ID"/>
                                </f:facet>
                                <h:outputText value="#{item.idFabricante}"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header">
                                    <h:outputText  value="nome"/>
                                </f:facet>
                                <h:outputText value="#{item.nomeFabricante}"/>
                            </h:column>                            
                            <h:column>  
                                <f:facet name="header">
                                    <h:outputText  value="excluir"/>
                                </f:facet>
                                <ice:commandButton action="#{FabricanteBean.deleteFabricante(_obj)}" image="img/del.jpg"  title="Excluir" styleClass="imgCmdBtn" onclick="if(!confirm('Tem certeza que deseja excluir este fabricante ?')){ return; };"></ice:commandButton>  
                            </h:column>
                        </ice:dataTable>   <br>                     
                        <ice:commandButton value="Excluir Fabricante" action="#{FabricanteBean.deleteFabricante}" visible="false"></ice:commandButton>
                    </div> 
                </ice:form>
            </div>
        </ice:outputBody>
    </ice:outputHtml>
</f:view>

e meu Bean:

package org.gtt.demo.bean;

import br.corp.gtt.entidade.Fabricante;
import java.util.Collection;
import org.gtt.demo.conexao.Updates;

/**
 *
 * @author gustavo.ramos
 */
public class FabricanteBean {

    private Fabricante f = new Fabricante();
    private Updates u = new Updates();

    public Fabricante getF() {
        return f;
    }

    public void setF(Fabricante f) {
        this.f = f;
    }

    public void addFabricante() {
        u.addFabricante(f);
    }

    public Collection<Fabricante> getFabricantes() {
        return u.getFabricantes();
    }

    public void deleteFabricante(Fabricante f) {
        u.deleteFabricante(f);
    }

    
}

Obs: aqui já estou tentando usar o que vc sugeriu.

gustavoRamos

Beleza, eu consigo chamar o método, mas não há valor setado no objeto, então não consigo deletar um registro no banco, ainda.

vou continuar tentando aqui.

agora tenho que pegar o valor que está na linha da dataTable, e setar o valor do objeto de acordo.

se alguém souber como…

Sefo

<ice:column> <ice:commandButton action="#{usoBean.excluir(_obj)}" image="./img/cancel_16.png" title="Excluir" styleClass="imgCmdBtn" onclick="if(!confirm('Tem certeza que deseja excluir este registro ?')){ return; };" /> </ice:column>

Auf Wiedersehen!!!

Criado 11 de novembro de 2008
Ultima resposta 11 de nov. de 2008
Respostas 4
Participantes 3