I don't believe you will find a good solution without HTML and CSS. It's actually very good for it original purpose. (static HTML pages)
When it comes to generating dynamic contents, my preferred choice in the Java world is to use Apache Wicket. This framework separates design and logic in different files. One static html file for the design with a corresponding Java file with the dynamic data.
Then Wicket generates a new html with dynamic contents from the models defined in the Java file.
An example that adds AJAX support when you click on a link:
Part of the HTML page:
<a href="#" wicket:id="link">click me</a>
The corresponding Java component:
add(new AjaxFallbackLink("link") {
public void onClick(AjaxRequestTarget target) {
if (target != null) {
// target is only available in an ajax request
target.addComponent(label);
}
}
});
The id "link" is the connection between the html and Java component.
To get a better understanding of how it works, you should try the online examples at http://www.wicketstuff.org/wicket14/ajax/. Here you can see many AJAX components in action, the HTML and the Java code for each component.