What are the main disadvantages of Java Server Faces 2.0?
Asked Answered
P

13

236

Yesterday I saw a presentation on Java Server Faces 2.0 which looked truly impressive, even though I am currently a happy ASP.NET MVC / jQuery developer. What I liked most about JSF was the huge amount of AJAX-Enabled UI components which seem to make development much faster than with ASP.NET MVC, especially on AJAX-heavy sites. Integration testing looked very nice too.

Since the presentation only emphasized the advantages of JSF, I'd like to hear about the other side as well.

So my questions are:

  • What are the main disadvantages of Java Server Faces 2.0?
  • What might make a JSF developer consider using ASP.NET MVC instead of JSF?
Pentomic answered 2/9, 2010 at 4:54 Comment(1)
Frankly we should get rid of all of this component, Bean, "feature" crap and go back to normal coding. I don't want a thick framework that's going to try to do everything for me (and do it horribly, I might add) and distance me away from what's actually going on underneath. I would recommend taking a look at TypeScript and try to find very thin layers of code that works with that and is built on that. JSF/PF and friends have a lot of "features" but you have to tiptoe your way around them and know the right magic attribute code or tree layout to do what you want etc.Crosseyed
K
467

JSF 2.0 disadvantages? Honestly, apart from the relative steep learning curve when you don't have a solid background knowledge about basic Web Development (HTML/CSS/JS, server side versus client side, etc) and the basic Java Servlet API (request/response/session, forwarding/redirecting, etc), no serious disadvantages comes to mind. JSF in its current release still needs to get rid of the negative image it gained during the early ages, during which there were several serious disadvantages.

JSF 1.0 (March 2004)

This was the initial release. It was cluttered with bugs in both the core and performance areas you don't want to know about. Your webapplication didn't always work as you'd intuitively expect. You as developer would run hard away crying.

JSF 1.1 (May 2004)

This was the bugfix release. The performance was still not much improved. There was also one major disadvantage: you can't inline HTML in the JSF page flawlessly. All plain vanilla HTML get rendered before the JSF component tree. You need to wrap all plain vanilla in <f:verbatim> tags so that they get included in the JSF component tree. Although this was as per the specification, this has received a lot of criticism. See also a.o. JSF/Facelets: why is it not a good idea to mix JSF/Facelets with HTML tags?

JSF 1.2 (May 2006)

This was the first release of the new JSF development team lead by Ryan Lubke. The new team did a lot of great work. There were also changes in the spec. The major change was the improvement of the view handling. This not only fully detached JSF from JSP, so one could use a different view technology than JSP, but it also allowed developers to inline plain vanilla HTML in the JSF page without hassling with <f:verbatim> tags. Another major focus of the new team was improving the performance. During the lifetime of the Sun JSF Reference Implementation 1.2 (which was codenamed Mojarra since build 1.2_08, around 2008), practically every build got shipped with (major) performance improvements next to the usual (minor) bugfixes.

The only serious disadvantage of JSF 1.x (including 1.2) is the lack of a scope in between the request and session scope, the so-called conversation scope. This forced developers to hassle with hidden input elements, unnecessary DB queries and/or abusing the session scope whenever one want to retain the initial model data in the subsequent request in order to successfully process validations, conversions, model changes and action invocations in the more complex webapplications. The pain could be softened by adopting a 3rd party library which retains the necessary data in the subsequent request like MyFaces Tomahawk <t:saveState> component, JBoss Seam conversation scope and MyFaces Orchestra conversation framework.

Another disadvantage for HTML/CSS purists is that JSF uses the colon : as ID separator character to ensure uniqueness of the HTML element id in the generated HTML output, especially when a component is reused more than once in the view (templating, iterating components, etc). Because this is an illegal character in CSS identifiers, you would need to use the \ to escape the colon in CSS selectors, resulting in ugly and odd-looking selectors like #formId\:fieldId {} or even #formId\3A fieldId {}. See also How to use JSF generated HTML element ID with colon ":" in CSS selectors? However, if you're not a purist, read also By default, JSF generates unusable ids, which are incompatible with css part of web standards.

Also, JSF 1.x didn't ship with Ajax facilities out of the box. Not really a technical disadvantage, but due to the Web 2.0 hype during that period, it became a functional disadvantage. Exadel was early to introduce Ajax4jsf, which was thoroughly developed during the years and became the core part of JBoss RichFaces component library. Another component libraries were shipped with builtin Ajax powers as well, the well known one being ICEfaces.

About halfway the JSF 1.2 lifetime, a new XML based view technology was introduced: Facelets. This offered enormous advantages above JSP, especially in the area of templating.

JSF 2.0 (June 2009)

This was the second major release, with Ajax as buzzword. There were a lot of technical and functional changes. JSP is replaced by Facelets as the default view technology and Facelets was expanded with capabilities to create custom components using pure XML (the so-called composite components). See also Why Facelets is preferred over JSP as the view definition language from JSF2.0 onwards?

Ajax powers were introduced in flavor of the <f:ajax> component which has much similarities with Ajax4jsf. Annotations and convention-over-configuration enhancements were introduced to kill the verbose faces-config.xml file as much as possible. Also, the default naming container ID separator character : became configurable, so HTML/CSS purists could breathe relieved. All you need to do is to define it as init-param in web.xml with the name javax.faces.SEPARATOR_CHAR and ensuring that you aren't using the character yourself anywhere in client ID's, such as -.

Last but not least, a new scope was introduced, the view scope. It eliminated another major JSF 1.x disadvantage as described before. You just declare the bean @ViewScoped to enable the conversation scope without hassling all ways to retain the data in subsequent (conversational) requests. A @ViewScoped bean will live as long as you're subsequently submitting and navigating to the same view (independently of the opened browser tab/window!), either synchronously or asynchronously (Ajax). See also Difference between View and Request scope in managed beans and How to choose the right bean scope?

Although practically all disadvantages of JSF 1.x were eliminated, there are JSF 2.0 specific bugs which might become a showstopper. The @ViewScoped fails in tag handlers due to a chicken-egg issue in partial state saving. This is fixed in JSF 2.2 and backported in Mojarra 2.1.18. Also passing custom attributes like the HTML5 data-xxx is not supported. This is fixed in JSF 2.2 by new passthrough elements/attributes feature. Further the JSF implementation Mojarra has its own set of issues. Relatively a lot of them are related to the sometimes unintuitive behaviour of <ui:repeat>, the new partial state saving implementation and the poorly implemented flash scope. Most of them are fixed in a Mojarra 2.2.x version.

Around the JSF 2.0 time, PrimeFaces was introduced, based on jQuery and jQuery UI. It became the most popular JSF component library.

JSF 2.2 (May 2013)

With the introduction of JSF 2.2, HTML5 was used as buzzword even though this was technically just supported in all older JSF versions. See also JavaServer Faces 2.2 and HTML5 support, why is XHTML still being used. Most important new JSF 2.2 feature is the support for custom component attributes, hereby opening a world of possibilities, such as custom tableless radio button groups.

Apart from implementation specific bugs and some "annoying little things" such as inability to inject an EJB in a validator/converter (already fixed in JSF 2.3), there are not really major disadvantages in the JSF 2.2 specification.

Component based MVC vs Request based MVC

Some may opt that the major disadvantage of JSF is that it allows very little fine-grained control over the generated HTML/CSS/JS. That's not JSF's own, that's just because it's a component based MVC framework, not a request (action) based MVC framework. If a high degree of controlling the HTML/CSS/JS is your major requirement when considering a MVC framework, then you should already not be looking at a component based MVC framework, but at a request based MVC framework like Spring MVC. You only need to take into account that you'll have to write all that HTML/CSS/JS boilerplate yourself. See also Difference between Request MVC and Component MVC.

See also:

Kamerad answered 2/9, 2010 at 4:54 Comment(7)
Regarding the scopes: in Java EE 6 it is also possible to use a scope that spans requests to different views. This is the CDI conversation scope. Although technically not a part of JSF proper, it integrates so well with JSF that it feels like a native JSF facility.Ridinger
Nevertheless, ui:repeat needs to be fixed, and bugs with nested h:dataTable + ajax in both implementations are pathetic after more than a year of releases. A pity really, because if not for the two problems I would recommend JSF 2.0 to anyone as the solution for all web application development.Kaela
Nice answer but i think miss some arguments about testing. JSF are hard to test. ASP.NET MVC are TDD ready.Speaker
I have 20 years of JAVA / WEB experience and I refuse all projects which use JSF as I and please do not feel offended, feel JSF is the most horrible of all frameworks. It violates every abstraction rules there are mixing css, html and java all together. Progress in JSF projects is ridiculous as compared to e.g. an ExtJS with Spring MVC project. Maintenance in JSF is horrible and simple otherwise straightforward issues are a complete clusterf*** in JSF. In my experience, do NOT use JSF. Standard or not, it's a bad standard that shouldn't even be a standard. Try VAADIM or wicket or ExtJS.Thamora
Big disadvantage is its mediocre integration in eclipse IDE with no refactoring support, bad webfragment support, bad Server integration, no click and go to component or include, no dependency graph of components/tags and no menu for own or 3rd party tags. I spend much time performing of project wide searches just to understand where component or function x is used.Pulverize
It was a nightmare to migrate to JSF 2.0 from JSF 1.2. But once that was done, I did see a lot of advantages sticking to JSF and not writing each component from scratch. I have integrated tinyMCE with JDF 2.0 and worked pretty well for me.Fusiform
Great support for JSF in IntelliJBomb
F
59

After 5 years of working with JSF, I think that I can add my 2 cents.

Two major JSF drawbacks:

  1. Big learning curve. JSF is complex, that's just true.
  2. Its component nature. Component-based framework tries to hide the true nature of the Web, which comes with a huge amount of complications and disasters (like not supporting GET in JSF within almost 5 years).
    IMHO hiding HTTP Request/Response from the developer is an enormous mistake. From my experience, every component-based framework adds abstraction to the Web development, and that abstraction results in unnecessary overhead and higher complexity.

And minor drawbacks that come to my mind:

  1. By default ID of the object is composed of its parents' ids, for example form1:button1.
  2. No easy way to comment-out incorrect page's fragment. Tag <ui:remove> needs syntactically correct content which is parsed anyway.
  3. Low quality 3rd party components which e.g. don't check isRendered() inside processXxx() method before continuing.
  4. Incorporating LESS & Sencha is hard.
  5. Doesn't play well with REST.
  6. Not so easy for UX designers, because ready-to-use components have their own CSS styles, that need to be overwritten.

Don't get me wrong. As a component framework JSF in version 2 is really good, but it's still component-based, and always will be...

Please take a look at the low popularity of Tapestry, Wicket and low enthusiasm of experienced JSF developers (what is even more meaningful). And for contrast, take a look at the success of Rails, Grails, Django, Play! Framework - they all are action-based and don't try to hide from the programmer true request/response and stateless nature of the web.

For me it's major JSF disadvantage. IMHO JSF can suits some type of applications (intranet, forms-intensive), but for real-life web application it's not a good way to go.

Hope it helps somebody with his/her choices that regards to front-end.

Flew answered 2/9, 2010 at 4:54 Comment(3)
+1 web was designed to be stateless, good or bad, no one can change it ( and there is no reason for that!)Skaw
It can surely handle large sites irctc.co.in is in jsf which largest ecommerce site in india. . . but yes with JSF you don't have much control on UI which is generated.Zoophyte
Could you define what is a real-life web application? Also JSF hides the nature of request/response, that could be true, but it's programmers reponsability to know what's going really under the covers. If you don't know how HTTP works, learn it before JSF or any other framework.Florence
Q
27

A few drawbacks that pop to mind:

  1. JSF is a component-based framework. This has inherent restrictions that have to do with obeying the component-model.
  2. AFAIK JSF supports only POST, so if you want a GET somewhere you have to do a plain servlet/JSP.
  3. Most components try to provide abstractions over domains like relational databases and front-end JavaScript, and many time these abstractions are "leaky" and very hard to debug.
  4. These abstractions might be a good starting point for a junior developer or someone not comfortable with a particular domain (e.g. front-end JavaScript), but are very hard to optimise for performance, since there are several layers involved, and most people that use them have little understanding of what is going on under the hood.
  5. The templating mechanisms that are usually used with JSF have nothing to do with how web desigers work. The WYSIWYG editors for JSF are primitive and in any case, your designer will give you HTML/CSS that you'll have to spend ages converting.
  6. Things like EL expressions are not statically checked and both the compiler and IDEs are not doing a good job at finding errors, so you'll end up with errors that you'll have to catch at run-time. This might be fine for dynamically typed language like Ruby or PHP, but if I have to withstand the sheer bloat of the Java ecosystem, I demand typing for my templates.

To sum up: The time you will save with JSF, from avoiding to write the JSP/servlet/bean boilerplate code, you'll spent it x10 to make it scale and do exactly what you want it to do.

Quota answered 2/9, 2010 at 4:54 Comment(12)
Thanks for your comprehensive reply. Just to make sure: Are you referring to JSF 2.0? It appears that there has been a major improvement in comparison to the previos version.Pentomic
He's clearly referring to JSF 1.x and overlooking the fact that it's a component based MVC framework while having a request based MVC framework in mind.Kamerad
@BalusC, would it be possible for you to point out which of my points (from 1 to 6) don't apply any more for and how is that? Thanks :)Quota
1) If you don't want a component based MVC, why are you looking at JSF? 2) Not anymore since JSF 2.0. 3) The domain part is untrue. None of the JSF components does that. The JS bugs in the impl, well, are there any? Mojarra's is pretty mature as of now. 4) JSF has indeed a steep learning curve, but that doesn't make it necessarily bad. 5) Visual editors are epic fail anyway. Again, componentbased vs requestbased MVC matter. 6) That's a matter of the right tool, not of JSF. Eclipse has plugins and IntelliJ Ultimate does it out the box.Kamerad
@Kamerad 1) Exactly my point. You have no reason to go with such a thing because it's just to messy 2) I'd sincerely like to see some reference to your claim 3) Plz ready again what I said, your answer starts bias and finishes irrelevant - plz google "leaky abstratcion" 4) No you are wrong, with IDE support you can start off really easily, the problem is if you ever wonder what goes on under the hood and why your app needs a ton of memory 5) Again your answer is totally irrelevant 6) Tools have nothing to do with with the fact that a template is not statically checked at compilation time.Quota
@Kamerad forgive me if I sound disrespectful, but the question is not JSF 1 vs. JSF 2, and your answer which reads like "the history of JSF" is irrelevant. Also your claim that JSF has "no serious disadvantages" fails to acknowledge the fundamental engineering principle that all tools have their limitations and their domain where they out perform other solutions.Quota
I consider the history to be very relevant to learn how JSF 2.0 has eliminated the old disadvantages because it were exactly those disadvantages which gave JSF a negative imago in the history. As to the remnant, well then we have just a disagreement.Kamerad
Regarding 6) Things like EL expressions are not statically checked, I've developed an IDE-independent utility that can be used for static checks of ELs, e.g. from an integration test. See github.com/jakubholynet/static-jsfexpression-validatorWithindoors
I honestly don't understand why you list "component based" as a disadvantage. That's like saying "the disadvantage of http is that it is stateless".. That should be edited. Sure sometimes the fact that http is stateless sucks, but sometimes it's exactly why we use it. The same with JSF.Corded
"AFAIK JSF supports only POST" This is not true. JSF has plenty of support for GET! "your designer will give you HTML/CSS that you'll have to spend ages converting." Also not true. JSF has an HTML pass-through mode. It's a bit like Wicket, but better (no need to define the tree in both HTML AND Java)Cymophane
I've been working with JSF since 2.0 and I can ensure that the productivity is superb when using component libraries like Primefaces. The only disadvantage is the steep learning curve. This answer should be deleted as it might mislead people judgment.Jipijapa
What do you unable to do with POST method and can do by GET?Polygraph
W
19

To me the biggest disadvantage of JSF 2.0 is the learning curve not only of JSF, but the component libraries that you have to use in order to get it to do useful work. Consider the staggering number of specifications and standards you have deal with to really be proficient:

  • HTML in the various incarnations. Don't pretend you don't need to know it.
  • HTTP -- when you can't figure out what is going on you have to open Firebug and see. For that you need to know this.
  • CSS -- Like it or not. It isn't so bad really and there are some nice tools out there at least.
  • XML -- JSF will probably the first place you use namespaces to this degree.
  • Servlet Specification. Sooner or later you will get into calling methods in this package. Aside from that you have to know how your Facelets gets turned into XHTML or whatever.
  • JSP (mostly so you know why you don't need it in JSF)
  • JSTL (again, mostly to cope with legacy framework)
  • Expression Language (EL) in its various forms.
  • ECMAScript, JavaScript, or whatever else you want to call it.
  • JSON -- you should know this even if you don't use it.
  • AJAX. I would say JSF 2.0 does a decent job of hiding this from you but you still need to know what is going on.
  • The DOM. And how a browser uses it. See ECMAScript.
  • DOM Events -- a topic all by itself.
  • Java Persistence Architecture (JPA) that is if you want your app to have any back end data base.
  • Java itself.
  • JSEE while you are at it.
  • The Context Dependency Injection specification (CDI) and how it clashes with and is used with JSF 2.0
  • JQuery -- I would like to see you get along without it.

Now, once you are done with that you can get on with the proprietary specifications, namely the component libraries and provider libraries you will pick up along the way:

  • PrimeFaces (my component library of choice)
  • RichFaces
  • MyFaces
  • ICEFaces
  • EclipseLink (my JPA Provider)
  • Hibernate
  • Weld

And don't forget the container! And all those configuration files:

  • GlassFish (2, 3, etc)
  • JBoss
  • Tomcat

So -- THIS IS MAKING IT EASY? Sure, JSF 2.0 is "easy" as long as all you want to do is the most basic web pages with the simplest interactions.

Simply put, JSF 2.0 is the most complicated and cumbersome mishmash of glued together technologies as exists in the software universe today. And I can't think of anything I would rather use.

Windrow answered 2/9, 2010 at 4:54 Comment(5)
Most of this also applies to any other web framework. How is it JSF's fault that you have to know jQuery in order to be productive with it?Pentomic
JSF is just the view layer. Now you seem to be implying that with other technologies you don't need to know all this, can you please show us which?Corded
Although those technologies are open source they are strongly bound to the private organizations that maintain them. Perhaps the word proprietary isn't right to you but they might as well be.Windrow
I would like to come to @Windrow 's defense... I feel he may have meant by saying proprietary, as in the fact that All open source projects, are actually "Owned" by someone.. Take for example MySQL. They really scored big when they sold out to Oracle. As also, did Java!! So, many times open source projects, even though they are open to be used/edited/contributed to, still are subject to the specifications inherent to each open source tool that you currently are using. Because of being "Owned" by someone. You can't ignore specs that are necessary to use them. Not that it's a bad thing :)Sabaean
I started learning Java with the Swing library, life was good. I wanted to do web programming with Java and after a hell of research,I took a deep dive into Primefaces..needless to say it was a disaster! As far as Frameworks are concerned, it seems managing complexity to not get in the way of productivity is hard, and introducing comprehensible complexity to give more power to developers is even harder! Either way, constant learning is the default state of affairs in this industry.Beersheba
L
16
  1. Inexperienced developers usually will create applications that are painfully slow and code will be really ugly and hard to maintain. Its deceptively simple to start, but actually requires some investment in learning if you want to write good programs.
  2. At least at the start you will often "stuck" on some problem and will spend more time reading balusc posts on internet than actually working :) After a while it will be less and less of that, but it still can be annoying.
  3. Even more annoying when you find out that the problem is not due to you lack of knowledge/mistake but actually a bug. Mojarra was(is?) quite buggy, and another layer of components adds even more problems. Richfaces was biggest piece of crap software ever written :) Don't know how it is now on version 4. We have Primefaces which is better, but still you will run into bugs or lack of features especially with more exotic components. And now you will need to pay for Primefaces updates. So I would say its buggy but its getting better especially after 2.2 version fixed some problems with spec. Framework getting more mature but still far from perfect (maybe myfaces better?).
  4. I don't find it especially flexible. Often if you need something very very customized and there are no components that does that - it will be a bit painful. Again I'm talking from average developer perspective - the one with deadlines, quick reading tutorials, and searching stackoverflow when getting stuck because no time to learn how it really works :) Often some components seems to have "almost" what you need, but not exactly and sometimes you might spend too much time to make it do something you want :) Need to be careful in evaluating if its better to create your own or torture existing component. Actually if you are creating something really unique I would not recommend JSF.

So in short my drawbacks would be: Complexity, Not very smooth development progress, buggy, inflexible.

Of course there are advantages too, but that's not what you asked. Anyway that's my experience with framework others might have different opinions, so best way is to just try it for a while to see if its for you (just something more complex - not naive examples - JSF really shines there:) IMHO best use case for JSF is business applications, like CRMs etc...

Lucianaluciano answered 2/9, 2010 at 4:54 Comment(0)
B
11

"JSF will output View-layer HTML and JavaScript that you cannot control or change without going into Controller code."

Actually JSF gives you the flexibility, you can either use standard/third-party components or create your own which you have full control over what is rendered. It is just one xhtml you need to create your custom components with JSF 2.0.

Bewhiskered answered 2/9, 2010 at 4:54 Comment(0)
D
10

I'm not a Java Server Faces expert at all. But IMHO the main disadvantage is that it's server side. I'm tired of learning and using server side web presentation layer frameworks like ASP.NET Web Forms, ASP.NET MVC, Java Server Faces, Struts, php frameworks and ruby on rails frameworks. I said goodbye to all of them, and I said hello to Angularjs and TypeScript. My presentation layer runs on the browser. I doesn't matter if it is served by Windows IIS running php or ASP.NET, or if it is served by an Apache web server running on Linux. I just need to learn just one framework that works everywhere.

Just my two cents.

Dionedionis answered 2/9, 2010 at 4:54 Comment(3)
And do not forget that each clientside framework, needs a aerverside counterpart for security, validation etc.Barcot
Yes, of course. Not only for security and validation, but for the backend and the bussiness logic. All done through restfull web services. The point here is to avoid generating html at the server side.Epithet
JSF and Primefaces are mature and very stable. JSF offer many alternatives for client side processing (accepting security aspects as well).Bomb
S
10

We developed a sample project with JSF (It was a three week research so we may have lose some things!)

We try to use core jsf, if a component is needed we used PrimeFaces.

The project was a web site with navigation. Each page should be loaded via ajax when the menu is clicked.

The site has two usecases:

  1. A page with a grid. The grid is loaded via ajax and should support sort and paging
  2. A three step wizard page. Each page has client side validation (for simple validations) and server side ajax base validation (for complex validations). Any server exception ( from service layer) should be displayed on the same page of wizard without navigating to next page.

We found that:

  1. You need to use some hacks from omniFaces to make the JSF view state fixed. The JSF state will be corrupted when you include pages via ajax in each other. This seems a bug in JSF and may be fixed on next releases (not in 2.3).
  2. The JSF Flow is not working correctly with ajax (or we could not make it work!) We try to use primeface wizard component instead but the client validation seems not supported and mean while it was not standard JSF flow standard.
  3. When using some jQuery components like jqGird, and you need to load JSON results, then you are advised to use pure servlet, The JSF will do nothing for you. So if you use these kind of components, your design will not fit in JSF.
  4. We try to do some client scripts when ajax complete by ajaxComplete and we found that the PF 4 has implemented its own ajax events. We had some jQuery components and we need to change their code.

If you change the above sample to a non Ajax project ( or at least less ajax project) you will not face lots of above issues.

We summarize our research as:

JSF is not working well in an fully ajax base website.

Of course we find lots of nice features in JSF which may be very helpful in some projects, so consider your project needs.

Please refer to JSF technical documents to review JSF advantages, and in my opinion the biggest advantage of JSF, is the COMPLETE AND HUGE support from @BalusC ;-)

Skaw answered 2/9, 2010 at 4:54 Comment(0)
H
6

Commenting on my last few months of Primefaces/JSF experience:

  • If you can use components "off the shelf", I guess it's not terrible.
  • However, it doesn't play well as soon as you step outside and need custom UIs. - For example, we needed to use Twitter's bootstrap for our project. (Not primefaces bootstrap).
    • Now our pages work as follows:
      • Page loads.
      • User interacts with a Primefaces that has ajax functionality
      • Bootstrap's javascript bindings break
      • We run extra javascript to rebind everything

The promise of JSF to avoid writing javascript turned into writing more javascript than we would have if not using Primefaces--and that javascript to is fix what Primefaces breaks.

It's a time sink--unless you again use "off the shelf" stuff. Also really ugly (Primefaces) when having to work with Selenium. It can all be done--but again--there's only so much time.

Definitely avoid this if you're working with a UX/design team and need to rapidly iterate on the UI--you can save time by learning jquery/writing straight HTML--or looking at react/angular.

Hypothalamus answered 2/9, 2010 at 4:54 Comment(5)
No, your choice of combining bootstrap and primefaces caused you to write more javascript than needed. Either use bootfaces or PF responsiveness. And how is it ugly in working with selenium? Please elaborate.Barcot
Here's a selenium example. HTLM checkbox: <input type="checkbox" name="versionsTab" value="version1"> Primefaces checkbox: <div class="ui-chkbox ui-widget"> <div class="ui-helper-hidden-accessible"> <input type="checkbox" name="datasetForm:tabView:versionsTable_checkbox"> </div> <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"> <span class="ui-chkbox-icon ui-c"></span> </div> </div> Selenium couldn't find the actual checkbox which has hidden. e.g. I could find it with selectors/coding/etc but the not-as-technical QA team couldn'tHypothalamus
You mean the concatenated name? Beauty is in the eye of the beholder. If you learn a little xpath, it can be circumvented without much trouble. And this is not a specifically a PF thing. And regarding the design team things. Let them design the template and for the rest adhere to the jquery-ui guidelines. Worked perfectly for us...Barcot
I joined the project later but similar issues to this presentation where project started with bootfaces but really needed full bootstrap (+ primefaces): oracleus.activeevents.com/2014/connect/…Hypothalamus
The app works--Primefaces isn't a show stopper by any means--but there is (and continues to be) an extra time sink. e.g. Especially compared to colleagues using frameworks such as Play and Django. (Agree with your other point, I think QA should be able to use xpath if needed--I gave them working scripts)Hypothalamus
W
6

For me the biggest shortcoming of JSF is poor support for programmatically (dynamically) generated pages.
If you want to construct your page (create page component model) dynamically from java code. For example if you are working on WYSIWYG web page constructor. Adequate documentation of this use case in not generally available. There are many points where you have to experiment and development is quiet slow. Many things just don't work how you would expect. But generally its possible hack it somehow.
Good thing is that it's not problem in philosophy or architecture of JSF. It's simply not elaborated enough (as far as I know).

JSF 2 brought Composite Components which should make component development easy, but their support for dynamic (programmatic) construction is very poor. If you overcome quiet complicated and almost undocumented process of dynamic Composite Component construction, you will find out that If you nest few Composite components little deeper, they stop working, throwing some exceptions.

But It seems that JSF community is aware of this shortcomings. They are working on this as you can see from these two bugs
http://java.net/jira/browse/JAVASERVERFACES-1309
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-599

Situation should be better with JSF 2.2 at least if we are talking about specification.

Winonawinonah answered 2/9, 2010 at 4:54 Comment(0)
J
1

JSF has many advantages, question being on disadvantage let me add couple of points on it.

On a practical scenario of implementing a web project with in a time frame you need to keep an eye on the following factors.

  • Do you have enough senior members in your team who can suggest best controls suitable for each scenario?
  • Do you have the bandwidth to accommodate the initial learning curve?

  • Do you have enough expertise in your team who can review the JSF
    stuff produces by the developers?

If your answer is 'No' for the questions, you may end up in a non-maintainable codebase.

Justitia answered 2/9, 2010 at 4:54 Comment(0)
N
0

Among all the "mainstream" frameworks such as Spring MVC, Wicket, Tapestry, etc., the JSF of Java EE with its composite components is the most elaborated presentation-layer and component-oriented technology provided. It is a bit cumbersome and incomplete compared to solutions provided by HybridJava.

Natalyanataniel answered 2/9, 2010 at 4:54 Comment(0)
L
0

JSF has only one disadvantage: before starting "JSF" development you should clearly understand web development, core java and front-end architecture.

Nowadays "new" JavaScript frameworks just try to copy/paste "JSF" component-based model.

Liturgics answered 2/9, 2010 at 4:54 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.