Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
Info su Push
Buongiorno, sto costruendo una webapp con vaadin 8 e ho bisogno di un Push più rapido. Mi spiego meglio: ho una textarea che si popola grazie ad un evento che proviene da un listener. Il primo è immediato, però gli altri vengono sempre con ritardo, a meno che l'evento venga dopo circa 10 secondi. Sembra che, dopo un push, ci sia un attesa e dopo tale attesa il push diventa pronto. Mi chiedevo se fosse possibile avere un push immediato e non aspettare tempo per vedere stampato l'evento su textarea.
Ciao Luca, potresti postare il codice coinvolto in modo da inquadrare meglio la situazione?
L'annotazione push è sulla classe MyUI con il modo Manual.
public class CallsUI extends HorizontalLayout implements myListeners {
private TextArea callsTextArea;
public CallsUI() {
MyListeners.addListener(this);
textArea = new TextArea();
this.addComponent(textArea);
}
@Override
public void onNewText(String msg) {
textArea.setValue(textArea.getValue()+"\n"+msg);
UI ui = getUI();
ui.access(new Runnable() {
@Override
public void run() {
ui.push();
}
});
}
}
Se capisco correttamente onNewText
è il tuo listener invocato da un processo in background che deve aggiornare la UI. Se il caso è questo le operazioni di modifica della UI devono stare all'interno di una UI.access
e, se @Push è impostato in PushMode.AUTOMATIC (che è il default) la chiamata a ui.push() non ti serve (viene fatto in automatico alla uscita della access
).
Prova in questo modo
@Override
public void onNewText(String msg) {
UI ui = getUI();
ui.access(new Runnable() {
@Override
public void run() {
textArea.setValue(textArea.getValue()+"\n"+msg);
}
});
}
HTH Marco
Ecco, quando non si legge con attenzione :D
Luca Mezzolla: L'annotazione push è sulla classe MyUI con il modo Manual.
Allora, come giustamente facevi, ci va anche la ui.push()
Ciao Marco, funziona anche come dici tu. Il primo testo viene stampato subito, però se mando un altro testo da stampare, viene stampato dopo qualche secondo. Invece, se aspetto 4-5 secondi e mando un altro testo da stampare, viene stampato subito. Io ho bisogno di ridurre al minimo questo tempo che vaadin impiega tra un push e l'altro. Mi sembra che sia così...
Che io sappia non ci dovrebbero essere dei delay tra una push e la seguente; faccio qualche prova e ti aggiorno
Ciao Luca, ho fatto una prova e messaggi successivi vengono portati in textarea immediatamente, senza alcun delay.
Se ti può essere utile qui trovi il codice con cui ho fatto le prove https://gist.github.com/mcollovati/69412cd88eefbdebdb86bea45d2e2f1a