Ga naar hoofdinhoud

Terminate and Error Actions 23.06

Open in ChatGPT

Bij het ontwikkelen van applicaties met webforJ is het essentieel om te definiëren hoe je app zich gedraagt wanneer deze beëindigt of een fout tegenkomt. Het framework biedt mechanismen om deze gedragingen aan te passen via terminate en error acties.

Overzicht

De App klasse stelt je in staat om acties te definiëren die worden uitgevoerd wanneer de app normaal beëindigt of wanneer deze een fout tegenkomt. Deze acties zijn instanties van de AppCloseAction interface en kunnen worden ingesteld met:

  • setTerminateAction(AppCloseAction action): Stelt de actie in die moet worden uitgevoerd bij normale beëindiging.
  • setErrorAction(AppCloseAction action): Stelt de actie in die moet worden uitgevoerd wanneer er een fout optreedt.

Beschikbare implementaties van AppCloseAction omvatten:

  • DefaultAction: Leegt de browser en toont een gelokaliseerd bericht om de gebruiker te vragen de app opnieuw te laden.
  • NoneAction: Voert geen actie uit, waardoor elke eerder ingestelde actie effectief wordt gereset.
  • MessageAction: Toont een aangepaste linkboodschap.
  • RedirectAction: Stuur de gebruiker door naar een opgegeven URL.
Het onderscheiden van beëindigingsacties en foutacties in webforJ

webforJ beschouwt beëindiging als gevolg van een opgegooide of niet-afgehandelde uitzondering niet als een foutactie, maar eerder als een beëindigingsactie omdat de app normaal stopt. Een foutactie treedt op wanneer de app een beëindigingssignaal ontvangt als gevolg van een externe fout, zoals wanneer de browser geen verbinding kan maken met de server die de app uitvoert.

Standaard gedrag

In webforJ versie 24.11 en eerder, gebruikt de app standaard DefaultAction voor zowel beëindigings- als foutgebeurtenissen. Dit betekent dat wanneer de app beëindigt of een fout tegenkomt, de browser een bericht toont om de gebruiker te vragen de app opnieuw te laden.

Vanaf versie 24.12 standaard webforJ naar NoneAction voor zowel beëindigings- als foutgebeurtenissen. Deze wijziging betekent dat er geen actie wordt ondernomen wanneer de app beëindigt of er een fout optreedt, waardoor webforJ de foutafhandeling kan delegeren aan een geschikte ErrorHandler, indien deze is geconfigureerd, of kan terugvallen op zijn generieke foutafhandelingsmechanismen. Door NoneAction te gebruiken, voorkomt de app dat de standaard foutafhandelingsflow wordt verstoord, zodat je aangepaste foutafhandelaars kunt definiëren of kunt vertrouwen op de ingebouwde foutbeheer van webforJ.

Acties aanpassen

Om het standaardgedrag te wijzigen, gebruik je de methoden setTerminateAction() en setErrorAction() in je App subclass.

Instellen van een aangepaste berichtactie

Als je een aangepast bericht wilt tonen bij normale beëindiging:

public class MyApp extends App {

@Override
public void run() throws WebforjException {
// Stel een aangepaste berichtactie in
setTerminateAction(new MessageAction(
"Bedankt voor het gebruik van onze applicatie! Klik om opnieuw te laden"
));
}
}

Instellen van een doorverwijsactie

Om de gebruiker naar een specifieke URL door te verwijzen bij normale beëindiging:

public class MyApp extends App {

@Override
public void run() throws WebforjException {
// Stel een doorverwijsactie in bij een fout
setTerminateAction(new RedirectAction(
"https://example.com/error"
));
}
}

De app beëindigen

Je kunt je app programmatisch beëindigen door de methode terminate() aan te roepen:

public class MyApp extends App {

@Override
public void run() throws WebforjException {
// Beëindig de applicatie onder bepaalde voorwaarden
if (someCondition) {
terminate();
}
}
}

Bij het aanroepen van terminate() wordt de actie die door setTerminateAction() is gedefinieerd uitgevoerd.

Hooks voor beëindiging

De App klasse biedt hookmethoden om acties uit te voeren vóór en na beëindiging:

  • onWillTerminate(): Wordt aangeroepen vóór beëindiging.
  • onDidTerminate(): Wordt aangeroepen ná beëindiging.
public class MyApp extends App {

@Override
protected void onWillTerminate() {
// Voer opschoon taken uit
}

@Override
protected void onDidTerminate() {
// Acties na beëindiging
}
}
Externe levenscyclusluisteraars

Voor meer geavanceerd levenscyclusbeheer, overweeg het gebruik van AppLifecycleListener om beëindigingsevents van externe componenten af te handelen zonder de App klasse te wijzigen. Dit is bijzonder nuttig voor plugin-architecturen of wanneer meerdere componenten moeten reageren op app-beëindiging. Leer meer over Levenscyclusluisteraars.

Aangepaste beëindigingspagina

In sommige gevallen wil je misschien een aangepaste beëindigingspagina weergeven wanneer je app eindigt, waarbij je gebruikers een gepersonaliseerd bericht of aanvullende bronnen biedt. Dit kan worden bereikt door de methode onDidTerminate() in je App subclass te overschrijven en aangepaste HTML in de pagina te injecteren.

Hier is een voorbeeld van hoe je een aangepaste beëindigingspagina kunt maken:

public class MyApp extends App {

@Override
public void run() throws WebforjException {
setTerminateAction(new NoneAction());
terminate();
}

@Override
protected void onDidTerminate() {
String html = """
<div style="display: flex; justify-content: center; align-items: center; height: 100vh; flex-direction: column;">
<h1>Bedankt voor het gebruik van webforJ</h1>
<p>Voor meer informatie, bezoek <a href="https://webforj.com">webforj.com</a></p>
</div>
""";

Page.getCurrent().executeJsVoidAsync(
String.format("document.body.innerHTML = `%s`", html)
);
}
}