DataTable excluindo valores errados no banco de dados

10 respostas
Gleidson_Henrique

Ola pessoal, possui um dataTable que mostra as informações e possui um link deletar no seguinte formato:

<blockquote>

<p:commandLink type=“submit” value=“Deletar”  action="#{dao.remove(cliente)}" process="@this" >

<f:setPropertyActionListener target="#{cliente}" value="#{c}" />

</p:commandLink></blockquote>

O action chama o metodo remove de um genericdao enviando o cliente do target do setPropertyActionListerner.

Coloquei em meu form filterBy. Dai o que acontece:

Se eu pesquiso alguma coisa no filterBy, na hora que eu vou excluir, sao excluidos informações erradas.
Vamos supor que na primeira linha o nome do cliente era: José
Quando usar o filterBy, o primeiro ficou como: Maria.
Se eu clico no deletar da maria (nisso o jose nem ta mais aparecendo), quem é excluido é o jose e nao a maria

Saberiam me dize o que pode ser que estou fazendo de errado?

Outra coisa, sou novo em programação web… eu era acostumado com desktop. Estou meio que aprendendo no bruteforce, embora acredito que estou pegando mais rápido que eu esperava…

Já vi alguns conteudo explicando como excluir e tals, e até entendi o que foi feito, porem, nao foi utilizada um dao generico igual estou utilizando. Vi nesse link:

http://uaihebert.com/?p=836&page=9

Muito bom o conteudo, porem ao meu caso acredito que nao me serviu… :frowning:

Se alguem puder me ajudar ficarei grato.

Abraços

10 Respostas

Gleidson_Henrique

Ninguem?

drsmachado

Use DataModel para popular a DataTable e resolva teus problemas sem ter que passar parâmetros.

yhhik

esse cliente é uma variavel?
passe apenas o id para o objeto e depois faça um find para mapear.
vc ta acessando sua dao diretamente da view?(isso nao é muito bom)
tem certeza que se usa a action da maneira que vc ta fazendo?

da uma pesquisada ae colega.

Gleidson_Henrique

yhhik:
esse cliente é uma variavel?
passe apenas o id para o objeto e depois faça um find para mapear.
vc ta acessando sua dao diretamente da view?(isso nao é muito bom)
tem certeza que se usa a action da maneira que vc ta fazendo?

da uma pesquisada ae colega.

Minha dataTable está assim:

<p:dataTable id="tbl" var="c" value="#{dao.findAll(cliente)}" widgetVar="tabClientes" emptyMessage="Desculpe, não foi encontrado clientes para o termo digitado ou não existe nenhum cliente cadastro ainda!" paginator="true" rows="10" rowKey="c.id" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15">

a var=“c”, é o value="#{c}" que é passado para o target="#{cliente}" do setPropertyActionListener. Então, a cada registro é gerado o ‘cliente’ respectivo a ele.

<p:commandLink type="submit" value="Deletar" action="#{dao.remove(cliente)}" process="@this" > <f:setPropertyActionListener target="#{cliente}" value="#{c}" /> </p:commandLink>

O GenericDao aceita somente um tipo objeto e nao um id como voce disse

public void remove(Object o) throws Exception {
	  Session em = HibernateUtil.getSessionFactory().openSession();
  Transaction trans = em.beginTransaction();
  try {
   em.delete(o);
   trans.commit();
  } catch (Exception e) {
   if (trans.isActive()) {
    trans.rollback();
   }
   throw e;
  } finally {
   em.close();
  }
 }

Sobre isso que voce falou:

O que tem de errado amigo? Sou novo em programação web em Java

Abraços

Gleidson_Henrique

Descobri o porque kkkk

É porque estou usando filterBy nas outras colunas, dai nessa como é somente um link nao utilizei, dai deu problema… rsrs

Foi so colocar um filterBy vazio que ja deu certo

Mas ainda continua minha duvida referente ao que o yhhik falou sobre o modo como estou utilizando.

Abraços

drsmachado

Se você pretende usar camadas, faça de forma correta.
As principais regras são:
View não acessa diretamente a DAO.
DAO não acessa diretamente a view.

Você precisa de uma camada intermediária entre elas, para isolar as responsabilidades.

yhhik

pesquise sobre padrões MVC.
no minimo vc deveria ta fazendo assim: view(pagina)>ManagedBean>dao…do jeito que vc ta fazendo não existe diferença entre dao e managedbean.
o metodo do action nao recebe parametro e tem que retornar uma String ou null;

Gleidson_Henrique

yhhik:
pesquise sobre padrões MVC.
no minimo vc deveria ta fazendo assim: view(pagina)>ManagedBean>dao…do jeito que vc ta fazendo não existe diferença entre dao e managedbean.
o metodo do action nao recebe parametro e tem que retornar uma String ou null;

Sobre o action nao retornar null, o que eu utilizo esta correto, o retorno esta do tipo void.

Sobre ele nao receber um parametro, olhe esse exemplo:

http://www.rponte.com.br/2009/08/27/managed-beans-nao-complique-simplifique/

<h:dataTable var="item" value="#{compraBean.itensNoCarrinho}">  
    <h:column>  
        <h:commandLink value="detalhe" action="#{itemBean.exibirDetalhesDoItem(item)}" />  
    </h:column>  
</h:dataTable>

Sobre a questão do MVC, como o proprio nome diz, Modelo, Visao e Controlador, nao diz DAO ne rsrs

As vantagens que eu vi seria que a cada novo formulario, eu nao precisaria criar um controller diferente. Por isso achei que isso seria perfeito.

Porém se existem desvantagens então gostaria de saber para fazer do jeito correto né…

Quais as desvantagens de se utilizar assim?

Abraços

drsmachado

Definitivamente, você precisa estudar sobre MVC urgentemente.
Só por que é MVC não significa que tenha que ter apenas Model View e Control. Na verdade, tem sim, mas você pode utilizar recursos que ampliem a capacidade e permitam que cada camada faça exatamente o que deve fazer, sem extrapolar a camada e/ou, fazer o que não lhe cabe (por exemplo, lógica de negócios na view, persistência na controller, etc)

Gleidson_Henrique

drsmachado:
Definitivamente, você precisa estudar sobre MVC urgentemente.
Só por que é MVC não significa que tenha que ter apenas Model View e Control. Na verdade, tem sim, mas você pode utilizar recursos que ampliem a capacidade e permitam que cada camada faça exatamente o que deve fazer, sem extrapolar a camada e/ou, fazer o que não lhe cabe (por exemplo, lógica de negócios na view, persistência na controller, etc)

Nao quis dizer que nao teria persistência, mas é justamente como voce disse, persistencia no controller, nao diretamente como fiz… rsrs

Voce saberia me explicar amigo as desvantagens de se fazer isso que fiz? acessar diretamente atraves da view o meu dao?

Abraços

Criado 17 de setembro de 2012
Ultima resposta 18 de set. de 2012
Respostas 10
Participantes 3