A Java web framework in the spirit of WebObjects
Free and open source. Components pair an HTML template with a Java class, and engifer apps deploy alongside your existing WO apps.
<h2>Hello <wo:str value="$user.name" /></h2>
<wo:if condition="$hasMessages">
<ul>
<wo:repetition list="$messages" item="$message">
<li>
<wo:link action="$openMessage">
<wo:str value="$message.subject" />
</wo:link>
</li>
</wo:repetition>
</ul>
</wo:if>
Why engifer
Most web frameworks make you translate: state into URLs, clicks into routes, pages into JSON and back. In engifer you write the page, and the framework keeps track of the rest.
-
A click is a method call
Bind a link to a Java method. engifer remembers the page it was on, so the method runs with all its state in place. No route, no form parsing, no IDs in hidden fields.
-
Templates are HTML
Plus a few dynamic tags:
<wo:str>,<wo:if>,<wo:repetition>. Bindings like$user.nameresolve against your component's plain getters and fields. -
Components all the way down
A page is a component. So is a menu, a table or a form row. Each is a template and a class; they nest, and take bindings like HTML tags take attributes.
-
Update part of a page
Wrap something in an update container and re-render only that, from the same component action. No front-end build.
-
Mistakes show up where they happen
Misspell a key and the error renders in place, in the page, with a suggestion: "Did you mean 'title'?" Templates reload on every request.
-
Plain Java
Java 25 and a standard Maven project. Apps deploy beside existing WebObjects apps, under wotaskd and JavaMonitor.
Good places to start
-
Getting started
From an empty folder to a running app with a page and a component action, in ten minutes.
-
Templating
Components, dynamic tags and bindings: what you can write in a template.
-
For WebObjects developers
What's the same, what's different, and deploying alongside WO apps.