Very hard to do cleanly with tags.
I don't find the source code of that model-1 jsp to be clean at all, indeed. And not only because it starts with the same exact code that there was at the beginning of the other example:
<%
PageState pageState = PageState.getCurrentPageState(request);
if(!pageState.screenRunning) {
// if this is the first time the page is loaded
// the screen is set up
pageState.screenRunning = true;
final ScreenArea body = new ScreenArea(request);
BloomingSiteHBFScreen lw = new BloomingSiteHBFScreen(body);
lw.register(pageState);
pageState.perform(request, response).toHtml(pageContext);
} else {
making me think there is no answer to templating and general factoring needs in your framework.
You don't make a cake by first and separately putting the ingredients on the table: and then at once put them all together. You use the first, mix it up, then add another, mix it up, and so on. Tags have no "command execute": they are pure state.
This is why they are more often used in model-2 or component oriented architectures with actions or page-behind classes.
This ambiguity ever present in code is one of its strengths. A further problem with tags is that they are the expression of a linear logic; but objects do more and better than that.
Of course they do!! I'm not saying you should replace your model-1 JSP with some model-1 tag-based analogy, or stuff like velocity templates used as a general purpose programming model (I've seen it in the past, it was far worse than your JSP source). What I'm saying is something like: what if you have to provide different views for the same content and controller? Copy and paste. What if you have a common part that is used by most of the pages as in your demo? Copy and paste.
Your model is not the only one that exploits the advantages of object orientation, nor is it the only one that allows development by components. What I'm saying is that it seems to me that better alternatives exist for the same component oriented approach, which more clearly allow to separate code and graphic layout, and seem to offer more neat tools to manage the complexity of the web layer. Period: I'm not saying one has to only use procedural logic to develop a view.
This will require, in our ugly framework, to change a single jsp and without even restarting the server, Canvas will be integrated. Oh so ugly!Second aside: to understand the framework it would help to take even a cursory look at the tutorial pdf on the JBlooming site.
You may find it beautiful, but I still find things like this pretty ugly:
<td width="20%" align="center" valign="top" rowspan="2"><%
// the properties container is set up
Container properties = new Container(pageState);
properties.title = "properties";
properties.tableHeight = "100%";
properties.start(pageContext);
%><table border="0"><tr><td><%
// every text field is instantiated and is given a default value
TextField tf = new TextField("TF_WIDTH", "</td><td>");
tf.label = "width";
tf.fieldSize = 3;
if(pageState.getEntry("TF_WIDTH").stringValueNullIfEmpty() == null)
pageState.addClientEntry("TF_WIDTH", 300);
tf.toHtml(pageContext);
%></td></tr><tr><td><%
I'm not saying that a powerful object model and rich component framework isn't interesting: I do feel a very strong need for componentized web development. What is ugly in your code is not the Folio object. It is
everything else in the same demo page: but the Folio object is not "a framework" in itself, it is an interesting component but I do not find it to be in any way an argument in favor of your model-1 approach.
I find the idea of creating components which, once simply configured and put on the page, layout themselves neatly a very good idea: this is the idea behing Tapestry, Wicket and JSF. Only, I find their approach to organization of the view templates far more compelling than yours: are you really sure you wouldn't have had a stronger architectural base for your same components and could anyway use the same design approach, if you provided for example a Folio component for Tapestry or Wicket?
Anyway, if you want to know what qualities I find JBlooming is missing, take a look at the sources behind these examples:
http://www.wicket-library.com/wicket-examples/.