Overslaan naar hoofdinhoud
← Blog

What a complete Java web application platform includes

· 8 minuten lezen
webforJ Team
Do it all in Java! Build in Java, deploy to the Web.

cover image

When a team picks a framework for a business app, the first screen is never the hard part. The hard part is everything that comes after it: navigation, a login, forms that validate, a table that holds real data, a second language, a test suite. A complete Java web app platform answers all of that before you ask. webforJ, the full-stack Java framework, covers it. It is a single framework, in a single language, that ships project setup, routing, a component library, data binding, security, Spring Boot integration, theming, translation, installable apps, and testing.

Because webforJ is a full-stack Java framework, the screens, the rules around them and the services behind them live in one Java codebase and one Maven build, with Spring Boot integration when you have it.

This post is a checklist. Each section names a need that every business app has and says what webforJ ships for it, with a link to the docs page. Use it to judge whether webforJ covers your project, or hand it to anyone who asks what webforJ includes.

Project setup​

A new project should start from a working structure, not a blank folder. startforJ generates a Maven project from a chosen archetype, with dependencies, configuration and a pre-made layout included. The archetypes are Hello World, Blank, SideMenu and Tabs, so a dashboard-style shell or a tabbed app is the first thing you run, not the last thing you build. The command line works too.

See Getting started and Archetypes.

Routing and navigation​

Views are Java classes. You mark one with @Route, and webforJ handles the URL, history, and navigation. The routing system also covers route patterns, query parameters, nested route hierarchies, navigation lifecycle observers and route transitions, so deep links and the browser back button behave the way users expect.

See Routing and Defining routes.

Layouts and the component library​

An app shell needs a header, a side navigation, and a content area. AppLayout provides that frame, and FlexLayout and ColumnsLayout arrange everything inside it. The component library covers the rest of a business UI: text, number, date and time fields, combo boxes, list boxes, dialogs, drawers, tabs, toasts, a tree, an upload component, and more. All of it is composed in Java, with no HTML templates and no JavaScript to write.

See Components overview and AppLayout.

Forms, data binding and validation​

Business apps are mostly forms. A BindingContext connects your fields to a Java bean with two-way synchronization, and transformation handles the conversion between what a field shows and what the model stores. Validation runs through built-in validators or standard Jakarta Validation annotations on the bean, and the messages are locale aware. Nested beans are validated too.

See Data binding and Jakarta Validation.

Tables and data repositories​

The Table component is built for large datasets, with sorting, selection, custom cell renderers, and a full set of events. It reads from a Repository, an abstraction that decouples the table from where the data lives, so one table works against a list in memory, a REST call or a database. For Spring Data JPA, the SpringDataRepository adapter brings pagination, sorting, and Specifications straight into the UI.

See Table and Repository.

Security​

webforJ includes route security. You declare access with @AnonymousAccess, @PermitAll, @RolesAllowed and @DenyAll, and the framework enforces it before the view is created. With Spring Boot on the classpath it plugs into Spring Security, including SpEL rules through @RouteAccess and access to the current user. Without Spring, you can build your own implementation on the same foundational interfaces. There is also guidance on common threats, secrets, and production hardening.

See Security and Annotations.

Spring Boot integration​

Spring beans are injected into your routes through the constructor. webforJ adds three scopes (@WebforjSessionScope, @EnvironmentScope and @RouteScope), runs Spring @Async jobs with the results marshalled back to the UI, and supports live reload through Spring DevTools. Your services, repositories and configuration stay ordinary Spring code.

See Spring and Scopes.

Styling and themes​

Appearance is controlled through a design system of CSS variables, with color palettes, spacing, sizing, borders and shadows as tokens, and light and dark modes built in. You restyle the whole app by changing tokens, and you reach inside a component through its documented shadow parts. The CSS you write sits next to your Java as plain CSS, with no preprocessor needed.

See Styling and CSS variables.

Internationalization​

Translation is part of the framework. A BundleTranslationResolver reads standard Java ResourceBundle files, the t() method looks up a key in the user's locale, and the browser locale is detected automatically. A custom resolver can load strings from a database instead. Components can react to locale changes at runtime.

See Translation and Locale management.

Installable apps​

The @AppProfile annotation generates a Web App Manifest with name, icons, screenshots and metadata, so users can install the app on their home screen or app menu. Push notifications are documented alongside it for apps that need to reach users outside the browser tab.

See Installable apps and Push notifications.

Async and background updates​

UI changes must run on the UI thread, and Environment.runLater moves the result of background work onto it. Interval handles periodic updates, and a debouncer delays an action until the user stops typing. Together they cover live dashboards, progress bars and search-as-you-type without raw thread handling.

See Asynchronous updates and Interval.

Testing​

Tests use the tools Java teams already know. JUnit covers logic, Selenium and Playwright drive end-to-end user journeys, a property descriptor tester checks component properties, and the Bun test runner runs frontend sources as part of the same build.

See Testing.

AI tooling​

The webforJ AI plugin installs the MCP server and the Agent Skills into Claude Code, Copilot, Cursor, Gemini, and Codex in one step. The MCP server gives an assistant live access to the webforJ knowledge base, project scaffolding and design-token validation. The skills teach it the conventions for securing, styling, localizing, and building apps.

See AI plugin, MCP server and Agent skills.

Complete web app platform checklist​

NeedWhat webforJ shipsDocs page
Project setupstartforJ, archetypesArchetypes
Routing@Route, patterns, query parameters, lifecycleRouting
Layouts and componentsAppLayout, FlexLayout, fields, dialogs, drawersAppLayout
FormsBindingContext, Jakarta ValidationData binding
Tables and dataTable, Repository, SpringDataRepositoryTable
SecurityRoute annotations, Spring Security integrationSecurity
Spring BootInjection, scopes, background jobs, live reloadSpring
StylingDesign tokens, light and dark modesStyling
TranslationBundleTranslationResolver, locale detectionTranslation
Installable apps@AppProfile, push notificationsInstallable apps
Async updatesEnvironment.runLater, IntervalAsync updates
TestingJUnit, Selenium, Playwright, BunTesting
AI toolingMCP server, Agent Skills, AI pluginAI plugin

Where to go next​

Generate a project with startforJ and open the archetype that matches your app. The Java full stack framework post shows a slice from database to screen, and the Java CRUD app walkthrough builds one with Spring Boot.

Frequently asked questions​

Does webforJ cover only the screens?​

No. It builds the screens, and it also ships routing, security, data binding, translation and testing, and it integrates with Spring Boot for your services. A new project can run as one Maven build with one codebase from the database to the screen.

What does webforJ include for a business web app?​

It includes project setup, routing, a component library, data binding with validation, a table with repositories, route security, Spring Boot integration, theming, translation, installable apps, async updates, testing and AI tooling. Every item in this list links to its docs page.

Do I need other libraries for security or forms?​

Not for the basics. Route security and form binding are part of webforJ, and Spring Security plugs in when Spring Boot is present. You add only the libraries your own domain needs, such as a JPA provider.

Bouw je iets met webforJ?

Bespreek je project, migratie of de geschiktheid van webforJ met het team.

Neem contact met ons op