Boa tarde galera, tudo certo? Bem na minha aplicação tenho uma lista de empréstimos na qual o usuário pode fazer o empréstimo de vários exemplares. Estou com problema no seguinte: se o usuário quizer “editar” seus empréstimos, não estou conseguindo EXCLUIR DA LISTA E NEM DO BANCO…Abaixo o código:
No xhtml:
public void removerExemplarDaLista(AjaxBehaviorEvent event) {
Iterator<EmprestimosxExemplares> it = emprestimosXexemplarList.iterator();
while (it.hasNext()) {
EmprestimosxExemplares objeto = it.next();
if (objeto.getEmxexCodexemplar().getExeCodigo().toString().equals(exemplarParaRemover.getEmxexCodexemplar().getExeCodigo().toString())) {
it.remove();
info("Exemplar removido da lista com sucesso.");
}
}
}
Ele até percorre a lista, dá a mensagem, porém não está excluindoooo…Se alguém puder ajudar, agardeço mtoo…Vlw
Duas perguntas, vc já tentou dar o update do click do remover direto na tabela, ao invés de passar o form?
Outra pergunta, quando vc debuga vc faz uma nova consulta para trazer a lista atualizada em enviar para tela novamente?
[quote=diogo soares]Duas perguntas, vc já tentou dar o update do click do remover direto na tabela, ao invés de passar o form?
Outra pergunta, quando vc debuga vc faz uma nova consulta para trazer a lista atualizada em enviar para tela novamente?[/quote]
Boa tarde diogo soares. Bem, respondendo as suas perguntas:
A primeira: sim, mas com o mesmo resultado, ele apaga na hora mas se vou editar está lá oke eu “tinha” APAGADO.
Segunda pergunta: sim, faço uma nova consulta…
Poderia continuar ajudando cara? Já não sei mais oke testar…Vlw…
Cara acho que pode ser duas coisas, ou ele não está comitando no banco sua remoção ou ele até remove mais em algum momento ele está em cache e insere novamente.
Faz o seguinte, coloca breakpoints em todos os métodos que são usados nessa tela, e vai debugando para ver se ele não está entrando em algum método que não deveria entrar, outra coisa é seu bean pode estar populado ainda mesmo quando vc efetuou a remoção, então vai passando o código bem devagar e olhando todos esses detalhes a falha deve estar bem próxima.
[quote=diogo soares]Cara acho que pode ser duas coisas, ou ele não está comitando no banco sua remoção ou ele até remove mais em algum momento ele está em cache e insere novamente.
Faz o seguinte, coloca breakpoints em todos os métodos que são usados nessa tela, e vai debugando para ver se ele não está entrando em algum método que não deveria entrar, outra coisa é seu bean pode estar populado ainda mesmo quando vc efetuou a remoção, então vai passando o código bem devagar e olhando todos esses detalhes a falha deve estar bem próxima.[/quote]
Bem cara, vou olhar aki, mas to meio sem esperança já… Ele está adicionando normal, nas outras telas ele está fazendo tudo normal…Qualquer coisa posto o resultado…Vlw diogo soares !!
Sim cara, debuguei por exemplo um usuário que fez o empréstimo de 3 exemplares. Ele compara os códigos para excluir e chega no final excluindo naquele que eu cliquei…
Saberia de mais alguma coisa??? Vlw cara…
Bem, isso que também eu não estou conseguindo fazer… Não sei se eu deveria fazer um CrudList.alguma coisa pra ele apagar do banco… Alguma ideia?? Vlw por estar ajudando cara…Vlw msm…
Sim, concerteza, vc terá que chamar um remove() excluíndo diretamente do banco, e depois ao atualizar o table ele irá fazer o select atualizando sua tabela.
BHá, mas eu não vou poder excluir direto do banco pelo seguinte motivo:
Vamos supor que o cara tenha 5 exemplares, e ele remove os 5 mas ele cancela ooke fez… ( daí já excluiu tudo do banco). Oke eu deveria fazer era o seguinte: se ele tivesse os 5 , carregar esse 5,ou seja, trabalhar com eles e SALVAR as alterações que foram feitas (exemplo: se o cara tinha 5 e excluiu 2, ele clica em salvar e ficam 3 no banco, mas se ele cancela a OPERAÇÃO, ele volta a ficar com os mesmos 5). Conseguiu entender diogo? Se puder ainda continuar ajudando deseja que eu passe algum método? Vlw cara…
Entendi velho, então vc terá que trabalhar com uma lista a parte, cria uma lista estática, e nela vc salva os itens que foram excluídos, caso o cara cancele vc adiciona na verdadeira e remove da estática, assim quando tiver certeza da exclusão manda a lista estática para exclusão no banco e manda um null pra ela no final.
Blz, vou testar aki e depois falo o resultado. Mais uma vez, mto obrigado diogo soares…Só uma pergunta: Teria como fazer sem fazer essa lista e sim com os métodos que possuo além desse que mandei ( tenho um editaobj e um salvaobj) ??? Vlw
Bom dia. Criei a lista e passei os valores para ela. Poderia me ajudar fazendo com que seja salvo os itens que foram excluídos? Abaixo, os códigos:
No meu bean:
public static List testeParaExcluir;
public static List getTesteParaExcluir() {
return testeParaExcluir;
}
public static void setTesteParaExcluir(List testeParaExcluir) {
EmprestimosJsfBean.testeParaExcluir = testeParaExcluir;
}
public void removerExemplarDaLista(AjaxBehaviorEvent event) {
testeParaExcluir = emprestimosXexemplarList;
Iterator<EmprestimosxExemplares> it = testeParaExcluir.iterator();
while (it.hasNext()) {
EmprestimosxExemplares objeto = it.next();
if (objeto.getEmxexCodexemplar().getExeCodigo().toString().equals(exemplarParaRemover.getEmxexCodexemplar().getExeCodigo().toString())) {
it.remove();
info("Exemplar removido da lista com sucesso.");
}
}
}
public void salva() {
try {
if (emprestimosXexemplarList.isEmpty()) {
warn("Você deve adicionar pelo menos 1 exemplar na lista");
} else {
crudObj.setBibEmprexexemplarCollection(emprestimosXexemplarList);
for (Iterator<EmprestimosxExemplares> it = this.emprestimosXexemplarList.iterator(); it.hasNext();) {
if (usuarioEmp_mesmo_usuarioRes) {
}
EmprestimosxExemplares eXe = it.next();
e.atualizaExeSituacao(eXe.getEmxexCodexemplar(), "E");
eXe.setEmxexNrorenova(0);
eXe.setEmxexSituacao("E");
eXe.setEmxexMultapaga("N");
}
super.salva();
emprestimosXexemplarList.clear();
}
} catch (Exception exception) {
fatal("Erro Grave" + exception.getMessage());
}
}
public void editaObj(Emprestimos obj) {
boolean devolveuExemplar = false;
boolean renovouExemplar = false;
if (obj.getBibEmprexexemplarCollection() != null) {
emprestimosXexemplarList = (List<EmprestimosxExemplares>) obj.getBibEmprexexemplarCollection();
codigoUsuarioEmpParaRegistro = obj.getEmpCodusuario().getUsuCodigo().toString();
for (Iterator<EmprestimosxExemplares> it = this.emprestimosXexemplarList.iterator(); it.hasNext();) {
EmprestimosxExemplares aux = it.next();
if (aux.getEmxexDtdev() != null) {
devolveuExemplar = true;
}
if (aux.getEmxexNrorenova() > 0) {
renovouExemplar = true;
}
}
if (renovouExemplar || devolveuExemplar) {
warn("Não é possivel editar o "
+ "empréstimo pois o mesmo já possui itens renovados ou devolvidos.");
} else {
super.editaObj(obj);
}
}
}
Se vocÊ ou mais alguém tiver disposto a ajudar, agradeço…
Seguinte velho, sua lista é estática então não precisa ter um método get e set.
No seu método excluir quando vc entra no if, antes de remover do Iterator vc vai adicionar na sua lista estática, então você remove de seu Iterator, depois no editar e no salvar, vc recupera os valores da lista quando quiser e após usar os valores da lista manda um null pra ela e já era.
[quote=diogo soares]Seguinte velho, sua lista é estática então não precisa ter um método get e set.
No seu método excluir quando vc entra no if, antes de remover do Iterator vc vai adicionar na sua lista estática, então você remove de seu Iterator, depois no editar e no salvar, vc recupera os valores da lista quando quiser e após usar os valores da lista manda um null pra ela e já era.[/quote]
Blz cara, desculpe a ignorância aí, é ke não tenho mto conhecimento com isso ainda, em laçoes e tals, mas to me esforçando… vlW por estar ajudando cara…
[quote=diogo soares]Seguinte velho, sua lista é estática então não precisa ter um método get e set.
No seu método excluir quando vc entra no if, antes de remover do Iterator vc vai adicionar na sua lista estática, então você remove de seu Iterator, depois no editar e no salvar, vc recupera os valores da lista quando quiser e após usar os valores da lista manda um null pra ela e já era.[/quote]
Boa tarde diogo…Consegui fazer o início, porém, agora, to me batendo um pouco pra pegar e excluir o que está na lista estática( não to sabendo como excluir uma da outra, ou se tenho que comparar as duas listas, ou seja, a estática e a outra com oque não cliquei para excluir…) Poderia me ajudar?? Mais uma vez, mto obrigado pela ajuda e compreensão…Abaixo o código:
public static List<EmprestimosxExemplares> testeParaExcluir = new ArrayList<EmprestimosxExemplares>();
public void removerExemplarDaLista(AjaxBehaviorEvent event) {
Iterator<EmprestimosxExemplares> it = emprestimosXexemplarList.iterator();
while (it.hasNext()) {
EmprestimosxExemplares objeto = it.next();
if (objeto.getEmxexCodexemplar().getExeCodigo().toString().equals(exemplarParaRemover.getEmxexCodexemplar().getExeCodigo().toString())) {
testeParaExcluir.remove(objeto);
it.remove();
info("Exemplar removido da lista com sucesso.");
}
}
}
Onde eu salvaria as alterações:
public void salva() {
try {
if (emprestimosXexemplarList.isEmpty()) {
warn("Você deve adicionar pelo menos 1 exemplar na lista");
} else {
if (isAlterando()) {
crudObj.setBibEmprexexemplarCollection(testeParaExcluir); // tentei fazer esse teste.....
} else {
crudObj.setBibEmprexexemplarCollection(emprestimosXexemplarList);
}
for (Iterator<EmprestimosxExemplares> it = this.emprestimosXexemplarList.iterator(); it.hasNext();) {
if (usuarioEmp_mesmo_usuarioRes) {
}
EmprestimosxExemplares eXe = it.next();
e.atualizaExeSituacao(eXe.getEmxexCodexemplar(), "E");
eXe.setEmxexNrorenova(0);
eXe.setEmxexSituacao("E");
eXe.setEmxexMultapaga("N");
}
super.salva();
emprestimosXexemplarList.clear();
}
} catch (Exception exception) {
fatal("Erro Grave" + exception.getMessage());
}
}
Se você ou se mais alguém puder ajudar, agradeço mtoo cara… Já não to sabendo mais como resolver o problema…Vlw