Yes, what you say is quite inviting. Actually we made strong attempts during the early design phases of RSF to stick within the JSF model - RSF actually had the first 6 months of its life as a set of utility libraries "JSFUtil" whose purpose was to make it easier to work with JSF. These were actually quite similar in functionality to what is now called "Facelets", only with the notable difference of the improvement in navigation transparency provided through the (now RSF) "ViewParameters" class. This issue is now being attacked in JSF through an independent route by Spring Web Flow.
Unfortunately after painful soul-searching, we were forced to conclude that the benefits we desired really could not be delivered with the JSF framework, despite the considerable community advantages that could be gained by this route :)
Yes, the example as posted does not show *too many* differences to Facelets, but it is worth concentrating on the differences that are visible even in this simple example.
i) Although the "jsfc" tag mentioned by a previous poster allows us to restore some measure of previewability, the tag you place it on is essentially a "fake" - its actual name and any attributes attached to it will be overwritten by the taglib renderer. Thus it is not actually either a *faithful* preview, nor a useful point of control to the designer. Therefore we see that in this example the designer is obliged to provide superfluous
tag levels just in order to deliver a CSS style or id target for their styling. This will annoy and confuse them. This is just a taster of the ways in which the client-side environment in "traditional" Java technologies is opaque, especially when one starts to talk about previewability of dynamic behaviours, rather than just markup.
ii) Table rendering and repeated controls in general is a much more decisive win over Facelets & co, especially in more complex cases. RSF has no dedicated "table" or "grid" controls, with their corresponding forced choice of tag structure. Instead any arbitrary block of markup can have repetition "induced" in it by a simple naming convention. Take a look at the definitions of the data tables in the "Hotel Booking Sample" to get an idea of the difference in directness.
I hope these two points give a flavour of the reasons why we were reluctantly forced to abandon a model whereby the RSF rendering primitives could be bundled within a JSF component tree rendering model. In fact, the last suggestion you made, implementing a custom "ViewHandler" within JSF was exactly how RSF began its early life - do consult this early and seminal article by Hans Bergsten, "Improving JSF by ditching JSP" -
http://www.onjava.com/pub/a/onjava/2004/06/09/jsf.html - I believe both the Facelets authors and ourselves were originally inspired by it.
IMHO, designer-friendliness is a crap shoot. HTML is a crappy markup for describing many of the assets we need to use to build our UIs, so consequently, we build higher level constructs. In the process, we decompose flat, designer-oriented HTML pages into easier to maintain components.
A separate issue of debate is where you handle markupjava integration. There's pro's and con's for either route and it comes down to personal preference. RSF looks more like Wicket than JSF code.
The example linked uses 'HotelUtil', what's hiding in there?
IMHO, designer-friendliness is a crap shoot.
I agree with this statement. In practice, web designers tend to be out of the picture once static mock-ups are complete. After that, the developer takes over and works on integrating live functionality into the mock-ups. It's rare to see a dynamic web UI evolve as the result of both the web designer and the developer simultaneously working on the same artifacts. Thus, concentrating on designer-friendliness in a templating or presentation technology possibly has extremely low return on a project.
I think Facelets is good enough in this regards; on several real projects, we have had designers use a Facelet-boiler-plate XHTML file, created by a developer, for all UI design work. Facelets worked well in Dreamweaver, etc...
I'm another RSF developer (just as a quick disclaimer).
I understand that for a lot of enterprise-ish needs, the above tends to be true. I don't think HTML is a particularly great layout schema, but unfortunately it's what we're stuck with. Because we work on stuff for higher education and academia, our User Designers are super specific about what they want things to look like. They're not java programmers, but they are pretty hip and know what they want their CSS and tag layouts to be. We've used JSPs, Veloctiy, JSF and things of the such in the past, and in general our Designers were pretty unhappy.
Because the templating rules in RSF are so simple, our team of a few designers, spread across a few universities, now actually do their work on our RSF projects on the same files, same Subversion, etc as the developers. It's been a great bonding experience, and they don't have to sit around twiddling their thumbs anymore waiting for us to do things.
Anyways, HTML isn't always great, and isn't always perhaps important to be in the hands of designers through the entire development cycle, but for the sort of (sometimes artsy) things we're trying to build, it works out pretty swell.
The usability of our applications has really started to improve since we started keeping designers in the entire development cycle, too.
It's rare to see a dynamic web UI evolve as the result of both the web designer and the developer simultaneously working on the same artifacts. Thus, concentrating on designer-friendliness in a templating or presentation technology possibly has extremely low return on a project.
What you say is quite true. RSF is essentially about extending the reach of Java webapp technology towards more "low-return" projects. If you are perhaps one of the more typical users of this site, you design your apps "ballistically", they are deployed once, in one place, for an essentially homogeneous customer base, and aside from minor tweaks and maintenance over their lifetime, that is essentially it. For applications and a customer base like that, the economics are in favour of one of the more traditional technologies like Wicket or Facelets.
RSF applications typically are deployed many times, in many different guises, and serve an essentially very heterogeneous user base, and need to be easily reskinned on the drop of a hat, and have to work without the benefit of a commercial toolchain and support. This is what the industry typically terms "low-return" projects, and this is the application sector which RSF targets.
It's rare to see a dynamic web UI evolve as the result of both the web designer and the developer simultaneously working on the same artifacts. Thus, concentrating on designer-friendliness in a templating or presentation technology possibly has extremely low return on a project.
What you say is quite true. RSF is essentially about extending the reach of Java webapp technology towards more "low-return" projects. [...]
For me, it's not really so much about the ultimate size or "return" of the project as about the size of the project's
iterations. What Bradley Smith describes sounds like a traditional waterfall approach to project management. What I'm after is agile development with small fast-moving cross-functional teams. In that situation, direct designer access to the code base is desirable. (And yes, the situation certainly assumes a fair amount of tech savvy in both the UI designer and the Java programmer.)
In a cross-functional team, I found vanilla JSF 1.1 to be overly intrusive and even downright hobbling when compared to plain JSP 2, but, to be fair, I haven't yet tried Facelets + JSF 1.2 on a real-world project.
IMHO, designer-friendliness is a crap shoot.
I very much dislike the HTML that designers deliver, it is far from what can be called "clean". Designers should now their CSS and everything will be fine.
IMHO, designer-friendliness is a crap shoot.
I very much dislike the HTML that designers deliver, it is far from what can be called "clean". Designers should now their CSS and everything will be fine.
If I may say, this symptomises exactly the kind of developer-centric bunker mentality that has led to the development of the mostly deficient array of current view technologies. Designers as well as developers will vary in the level of excellence they bring to their craft, and if you were to look at a lot of the Java code that is pumped out by the "average developer" I'm sure you would also consider it highly deficient.
The issue historically is that developers of web frameworks have not been prepared to respect the competence that designers might be capable of bringing to the process, or even that design is indeed a valid discipline in its own right. It's hardly a surprise, if the popular impression is that "design ends with CSS".
IMHO, designer-friendliness is a crap shoot.
I very much dislike the HTML that designers deliver, it is far from what can be called "clean". Designers should now their CSS and everything will be fine.
If I may say, this symptomises exactly the kind of developer-centric bunker mentality that has led to the development of the mostly deficient array of current view technologies. Designers as well as developers will vary in the level of excellence they bring to their craft, and if you were to look at a lot of the Java code that is pumped out by the "average developer" I'm sure you would also consider it highly deficient.
The issue historically is that developers of web frameworks have not been prepared to respect the competence that designers might be capable of bringing to the process, or even that design is indeed a valid discipline in its own right. It's hardly a surprise, if the popular impression is that "design ends with CSS".
You may say so but my opinion is that designers are designers and HTML is code-ish. How on earth can I make a decent component that is also easy extendable while I let everybody fool around with my markup? I am telling you CSS covers 95% of the needs but unfortunally most dont know how powerfull it actually is.
You may say so but my opinion is that designers are designers and HTML is code-ish. How on earth can I make a decent component that is also easy extendable while I let everybody fool around with my markup? I am telling you CSS covers 95% of the needs but unfortunally most dont know how powerfull it actually is.
I agree the power of CSS is generally underestimated. But just as a sampler, here are some things which you can't do with CSS.
i) Re-ordering. CSS can easily change layouts from horizontal to vertical and v.v. but cannot for example change the relative ordering of elements.
ii) Table layout. Switching a layout from tr, td to div/span + CSS pr v.v. is prohibitive in other frameworks. If you have a table "widget", you are stuck with the markup it produces, which is generally locked up in developer-land. If you don't like its tags/strategy, tough - go write yourself a new widget. With RSF/IKAT, this sort of change can be achieved just in HTML. Nested tables/repetition also no problem since it is a unified system throughout.
And to answer this point specifically - "How on earth can I make a decent component that is also easy extendable while I let everybody fool around with my markup" - actually that is *precisely* what we want! The web abounds with clever "widgets" that have their markup/DHTML behaviour precisely the way *one* developer decided. We will shortly be moving on to generalised tree controls, but as an early output from the Fluid Project take a look at the "Reordering control"
http://wiki.fluidproject.org/display/fluid/Reorderer-Lightbox+Separation+of+Concerns
This packages the functionality of allowing "reorderability" through some variety of modes, both keyboard + mouse, but without compromising accessibility, but *at the same time* allowing full control over the markup which is output, which is specified in plain HTML like everything else. In JSF/Facelets, you would need to write a new widget/taglib for every different kind of "payload" for this control.
IMHO, designer-friendliness is a crap shoot.
I very much dislike the HTML that designers deliver, it is far from what can be called "clean". Designers should now their CSS and everything will be fine.
That is exactly why I value the approach implemented by Tapestry(used, love it), Wicket(use now), and RSF (not used) - they allow reusing whatever HTML has been given and more - they allow put the burden of maintaining the HTML on the shoulders of original producers, sweeeet:)
I could advice them to use CSS or do decent job, but in the end developers are not affected by HTML quality that much.
Let's concentrate efforts.
For God's sake yes. Channel these improvements towards Facelets and the ongoing JSR.
Noooooooo! Spring noooooooo! This is killing Java!
How many XML files will I have to edit in order to make a Hello World?
Noooooooo! Spring noooooooo! This is killing Java!
Smart things such as Spring hardly kill a technology: stupidity could, instead.
Smart things such as Spring hardly kill a technology: stupidity could, instead.
Oh tell me, smart one, what Spring is good for? Spring is a framework for everything and for nothing, trying to mimic features from dynamic languages. Have you ever wondered why Rails is such an hype?
If you are a developer you need to understand what your current environment is good for, otherwise it is the opposite of smart.
Hi Guys,
Congratulations on the RSF release. I just have a quick question: can IKAT be used on its own as a templating engine?
PS if this is already properly documented somewhere, feel free to post a link and I'll do my homework.
Many thanks.
Freddy
Hi Guys,
Congratulations on the RSF release. I just have a quick question: can IKAT be used on its own as a templating engine?
PS if this is already properly documented somewhere, feel free to post a link and I'll do my homework.
Many thanks.
Freddy
Yes, IKAT can be used as a standalone renderer. Probably the most convenient packaging for this usage style is the SpringMVC integration where IKAT templating can be dropped in as a direct replacement for JSP/Velocity et. al. You can see a worked example here:
http://www2.caret.cam.ac.uk/rsfwiki/Wiki.jsp?page=SpringMVCStep
Cheers.
Yes, IKAT can be used as a standalone renderer. Probably the most convenient packaging for this usage style is the SpringMVC integration where IKAT templating can be dropped in as a direct replacement for JSP/Velocity et. al. You can see a worked example here:
http://www2.caret.cam.ac.uk/rsfwiki/Wiki.jsp?page=SpringMVCStep
Cheers.
Thanks Antranig for your reply and the link to the step-by-step example. Very interesting stuff.
Cheers,
Freddy
Aaron or Steven, what ("competitive") advantages do you see over Wicket or Tapestry approaches?
Aaron or Steven, what ("competitive") advantages do you see over Wicket or Tapestry approaches?
I think each of these technologies fulfills a different need despite the shared concepts. It is hard to answer a question like this because I would not bother working on RSF if I thought there were better options out there. I assume the Wicket and Tapestry teams feel the same way. I am not going to get into a "who is best" argument because those are colossal wastes of time but if you want my opinion then here it is.
A shop which is heavily invested in JSF development is likely to be more effective in the short term with Tapestry than with RSF or Wicket. A shop which has little familiarity with Spring and JSF would make faster progress with Wicket than RSF and Tapestry. I feel that a development group with a strong set of designers and good experience using Spring is going to be most efficient and productive with something like RSF compared with Tapestry and even Wicket.
That's just my opinion though and not meant to detract from the strengths of any other project. There are many factors to consider when choosing a view technology and there is no right answer and no silver bullet. I personally recommend a "don't believe the hype" and "try before you buy" approach to choosing technologies. Give them all a try and pick the one you prefer.
I personally recommend a "don't believe the hype" and "try before you buy" approach to choosing technologies. Give them all a try and pick the one you prefer.
+1
+1, but I'd add also that once you've made a choice, it can become a trap to prefer the one you picked. technologies change.