Creating a Basic App
In Project Setup heb je een webforJ-project gegenereerd. Het is nu tijd om de hoofdklasse voor het project te maken en een interactieve interface toe te voegen met behulp van webforJ-componenten. In deze stap leer je over:
- Het instappunt voor apps die gebruik maken van webforJ en Spring Boot
- webforJ en HTML-elementcomponenten
- Het gebruik van CSS voor het stylen van componenten
Het voltooien van deze stap creëert een versie van 1-creating-a-basic-app.
De app uitvoeren
Terwijl je je app ontwikkelt, kun je 1-creating-a-basic-app als vergelijking gebruiken. Om de app in actie te zien:
-
Navigeer naar de hoofdmap met het
pom.xml-bestand, dit is1-creating-a-basic-appals je de versie op GitHub volgt. -
Gebruik de volgende Maven-opdracht om de Spring Boot-app lokaal uit te voeren:
mvn
De app opent automatisch een nieuwe browser op http://localhost:8080.
Het instappunt
Elke webforJ-app bevat een enkele klasse die App uitbreidt. Voor deze tutorial en andere gepubliceerde webforJ-projecten wordt het vaak Application genoemd. Deze klasse bevindt zich in een pakket dat is genoemd naar de groupId die je hebt gebruikt in Project Setup:
1-creating-a-basic-app
│ .editorconfig
│ .gitignore
│ pom.xml
│ README.md
│
├───.vscode
├───src/main/java
│ └──com/webforj/tutorial
│ └──Application.java
└───target
Binnen de Application-klasse gebruikt de SpringApplication.run()-methode de configuraties om de app te starten. De verschillende annotaties zijn voor de configuraties van de app.
@SpringBootApplication
@StyleSheet("ws://css/card.css")
@AppTheme("system")
@AppProfile(name = "Customer Application", shortName = "CustomerApp")
public class Application extends App {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Annotaties
De @SpringBootApplication is een kernannotatie in Spring Boot. Je plaatst deze annotatie op de hoofdklasse om deze te markeren als het startpunt van je app.
@StyleSheet, @AppTheme en @AppProfile zijn slechts enkele van de vele webforJ-annotaties die beschikbaar zijn wanneer je expliciet configuraties wilt instellen.
-
@StyleSheetembed een CSS-bestand in de webpagina. Verdere details over hoe je met een specifiek CSS-bestand kunt omgaan, worden later behandeld in Styling met CSS. -
@AppThemebeheert het visuele thema van de app. Als ingesteld opsystem, adopteert de app automatisch het voorkeurs-thema van de gebruiker:light,darkofdark-pure. Voor informatie over het maken van aangepaste thema's of het overschrijven van de standaardthema's, raadpleeg het artikel over Thema's. -
@AppProfilehelpt bij het configureren hoe de app zich presenteert aan de gebruiker als een installeerbare app. Bij minimaal deze annotatie is eennamevoor de volledige naam van de app en eenshortNamenodig voor gebruik wanneer de ruimte beperkt is. DeshortNamemag niet meer dan 12 tekens bevatten.
Een gebruikersinterface maken
Om je UI te maken, moet je HTML-elementcomponenten en webforJ-componenten toevoegen. Voor nu heb je alleen een enkele pagina-app, dus je voegt componenten rechtstreeks toe aan de Application-klasse.
Om dit te doen, overschrijf je de App.run()-methode en maak je een Frame om componenten aan toe te voegen.
@Override
public void run() throws WebforjException {
Frame mainFrame = new Frame();
// Maak UI-componenten en voeg ze toe aan het frame
}
HTML-elementen gebruiken
Je kunt standaard HTML-elementen aan je app toevoegen met HTML-elementcomponenten.
Maak een nieuwe instantie van de component en gebruik de add()-methode om deze toe te voegen aan het Frame:
// Maak de container voor de UI-elementen
Frame mainFrame = new Frame();
// Maak de HTML-component
Paragraph tutorial = new Paragraph("Tutorial Application!");
// Voeg de component toe aan de container
mainFrame.add(tutorial);
webforJ-componenten gebruiken
Terwijl HTML-elementen nuttig zijn voor structuur, semantiek en lichte UI-behoeften, bieden webforJ-componenten meer complexe en dynamische gedrag.
De onderstaande code voegt een Button-component toe, verandert het uiterlijk met de setTheme()-methode en voegt een gebeurtenisluiser toe om een Message Dialog-component te maken wanneer de knop wordt aangeklikt. De meeste webforJ-componentmethoden die een component wijzigen, retourneren de component zelf, zodat je meerdere methoden kunt ketenen voor compactere code.
// Maak de container voor de UI-elementen
Frame mainFrame = new Frame();
// Maak de webforJ-component
Button btn = new Button("Info");
// Wijzig de webforJ-component en voeg een gebeurtenisluiser toe
btn.setTheme(ButtonTheme.PRIMARY)
.addClickListener(e -> OptionDialog.showMessageDialog("Dit is een tutorial!", "Info"));
// Voeg de component toe aan de container
mainFrame.add(btn);
Stylen met CSS
De meeste webforJ-componenten hebben ingebouwde methoden om veelvoorkomende stijlwijzigingen aan te brengen, zoals grootte en thematisering.
// Stel de breedte van het Frame in met een CSS-sleutelwoord
mainFrame.setWidth("fit-content");
// Stel de maximale breedte van de knop in met pixels
btn.setMaxWidth(200);
// Stel het thema van de knop in op PRIMARY
btn.setTheme(ButtonTheme.PRIMARY);
Naast deze methoden kun je je app stylen met CSS. De sectie Styling van de documentatiepagina van elke component bevat specifieke details over de relevante CSS-eigenschappen.
webforJ komt ook met een set ontworpen CSS-variabelen genaamd DWC-tokens. Zie de documentatie over Styling voor gedetailleerde informatie over het stylen van webforJ-componenten en hoe de tokens te gebruiken.
Een CSS-bestand refereren
Het is het beste om een apart CSS-bestand te hebben om alles georganiseerd en onderhoudbaar te houden. Maak een bestand met de naam card.css in src/main/resources/static/css, met de volgende CSS-classdefinitie:
.card {
display: grid;
gap: var(--dwc-space-l);
padding: var(--dwc-space-l);
margin: var(--dwc-space-l) auto;
border: thin solid var(--dwc-color-default);
border-radius: 16px;
background-color: var(--dwc-surface-3);
box-shadow: var(--dwc-shadow-xs);
}
Verwijs vervolgens naar het bestand in Application.java door de @StyleSheet-annotatie te gebruiken met de naam van het CSS-bestand. Voor deze stap is het @StyleSheet("ws://css/card.css").
Deze tutorial gebruikt het Webserverprotocol om naar het CSS-bestand te verwijzen. Om meer te leren over hoe dit werkt, zie Resources beheren.
CSS-klassen aan componenten toevoegen
Je kunt dynamisch klassennamen aan componenten toevoegen of verwijderen met de methoden addClassName() en removeClassName(). Voor deze tutorial wordt er maar één CSS-klasse gebruikt:
mainFrame.addClassName("card");
Voltooide Application
Je Application-klasse zou er nu ongeveer zo uit moeten zien:
@SpringBootApplication
@StyleSheet("ws://css/card.css")
@AppTheme("system")
@AppProfile(name = "Customer Application", shortName = "CustomerApp")
public class Application extends App {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run() throws WebforjException {
Frame mainFrame = new Frame();
Paragraph tutorial = new Paragraph("Tutorial App!");
Button btn = new Button("Info");
btn.setTheme(ButtonTheme.PRIMARY)
.setMaxWidth(200)
.addClickListener(e -> OptionDialog.showMessageDialog("Dit is een tutorial!", "Info"));
mainFrame.setWidth("fit-content")
.addClassName("card")
.add(tutorial, btn);
}
}
Voor een complexere app kun je de UI opdelen in meerdere pagina's voor een betere organisatie. Dit concept wordt later in deze tutorial behandeld in Routing en Composities.
Volgende stap
Na het maken van een functionele app met een basisgebruikersinterface, is de volgende stap het toevoegen van een datamodel en het weergeven van de resultaten in een Table-component in Werken met Gegevens.