1
resposta

Problema com ciclo de vida

Tenho o seguinte problema:

Tenho uma table que exibe o resultado dos arquivos que fiz upload, a cada vez que submeto o Form salvo esse arquivo na base, volto ao controller e adiciono um novo item a um atributo de lista do meu DTO, e então exibo o mesmo na tela.

Porém, surgiu uma dúvida, gostaria que nesta table exibisse apenas os upload feitos por último, ou seja, se o usuário mudar de página gostaria que esta lista fosse removida, para que quando ele voltasse nesta página a lista estivesse vazia.

O que eu percebi é que todos os meus objetos ficam vivos enquanto o servidor estiver vivo, ou seja, se eu faço uma requisição para um outro controller, quando eu voltar a requisitar este que faz uploads, o meu DTO ainda esta preenchido com a lista.

Procurei formas de implementar algo como @PostConstruct para apagar a lista toda vez que o meu controller é criado, porém, sem sucesso.

Via redirectAttributes.addFlashAttributes também não consegui, por que se eu adicionar um item a lista, na próxima requisição já não tenho mais o valor da lista já que meu controller redireciona após a seleção de um novo arquivo.

O que eu poderia fazer?

1 resposta

O seu problema pode ocorrer por diversos motivos. Você está usando cache? Se você quer atualizar apenas a tabela e as tentativas anteriores não funcionarem você pode usar ajax para resolver o problema. Se o objetivo da requisição for apenas para atualizar a tabela, é mais eficiente usar ajax e especificar apenas o campo que deseja que seja atualizado do que submeter toda a página novamente.

Seria interessante você nos mostrar o código para encontramos uma solução. Você está usando jsf ou jsp?

Está usando algum framework de gerenciamento de cache como o guava por exemplo?

Exemplo para resolução do problema com ajax.

 <h:commandButton id="dice" action="#">
      <f:ajax  event="click" update="tabela" />                            
  </h:commandButton>

Se estiver usando primefaces e a ação deva ocorrer em algum componente do primefaces você deve tentar usar o ajax com p:ajax e não necessariamente com f:ajax.

Caso não atenda existem outros exemplos aqui: https://stackoverflow.com/search?q=ajax+event+click+jsf+update