Bom dia!
Estou enfrentando um problema com formulários onde o usuário tem o dedo nervoso e clica várias vezes no submit e a função é executada várias vezes.
Estou usando o VRaptor3.5 temos como evitar isso no server side??
Bom dia!
Estou enfrentando um problema com formulários onde o usuário tem o dedo nervoso e clica várias vezes no submit e a função é executada várias vezes.
Estou usando o VRaptor3.5 temos como evitar isso no server side??
A solução mais simples é desabilitar o botão depois de um click na UI. Você pode tentar entender quando o botão deve ser habilitado, depende do caso.
No server side, você pode fazer isso de algumas formas diferentes, como por exemplo serializar o acesso à função (synchronized
ou similares no Java EE) em um singleton. Quando a função for executada pela primeira vez, você pode marcar a timestamp em uma variável e verificá-la antes de executar o método de novo, impondo um limite de tempo para a execução do método. Ficou meio confuso, deixa eu tentar explicar em código (pseudo-java):
private long ultimaExecucao = 0;
private long tempoMinimoEntreExecucoesEmMilissegundos = 10000; // 10 segundos
public synchronized void func() {
final long millisAtuais = System.currentTimeMillis();
if (millisAtuais - ultimaExecucao < tempoMinimoEntreExecucoesEmMilissegundos) {
// faz o que tiver de fazer
ultimaExecucao = millisAtuais;
}
}
É só um exemplo do que dá para ser feito. Eu particularmente não concordo com uma abordagem assim, acho que dá pra tratar legal na UI ou na lógica do negócio, com bloqueios e checagens variadas.
Vc tb pode usar o pattern JEE chamado de “Synchronized Token”.
Vc tb pode usar outro pattern HTTP chamado de “Post/Redirect/Get”
Fique a vontade