Skip to content
CMO & CTO
CMO & CTO

Closing the Bridge Between Marketing and Technology, By Luis Fernandez

  • Digital Experience
    • Experience Strategy
    • Experience-Driven Commerce
    • Multi-Channel Experience
    • Personalization & Targeting
    • SEO & Performance
    • User Journey & Behavior
  • Marketing Technologies
    • Analytics & Measurement
    • Content Management Systems
    • Customer Data Platforms
    • Digital Asset Management
    • Marketing Automation
    • MarTech Stack & Strategy
    • Technology Buying & ROI
  • Software Engineering
    • Software Engineering
    • Software Architecture
    • General Software
    • Development Practices
    • Productivity & Workflow
    • Code
    • Engineering Management
    • Business of Software
    • Code
    • Digital Transformation
    • Systems Thinking
    • Technical Implementation
  • About
CMO & CTO

Closing the Bridge Between Marketing and Technology, By Luis Fernandez

When to Avoid JSF: Choosing Simpler Paths

Posted on May 17, 2013 By Luis Fernandez

I keep meeting teams who pick JSF for a simple site, then spend weeks wiring converters, custom components, and view state quirks just to ship a form with two fields and a table. If your gut says this feels heavy for what you need, you are not wrong. JavaServer Faces can be great for certain kinds of apps, but the minute your project leans toward fast front end changes, REST calls, and a sprinkle of JavaScript, the framework starts to push back. This is a note from the trenches about when to sidestep JSF and take a simpler path.

When JSF turns simple into sticky

JSF encourages a component centric view of the world. You get tags, backing beans, and a server side state machine that wants to drive your pages. That is fine when your UI is a classic CRUD console with predictable flows. It is not fine when the product owner asks for small interactive tweaks every other day. Adding a little inline validation, a client side hint, or a custom grid behavior often means writing a renderer or diving through faces config rules. You might be holding a sledgehammer for a thumbtack.

Then comes AJAX. JSF has partial page updates, which looks handy until you are debugging why a component did not rerender because of naming container rules or view state mismatches. If your app is mostly calling JAX RS endpoints and painting JSON on the page with jQuery or a tiny view library, the JSF lifecycle becomes background noise you fight rather than a boost you enjoy.

Routing is another spot. JSF likes to own navigation through faces config or annotations. If you want clean REST like routes or SEO friendly pages and light caching at a reverse proxy, you will spend time bending JSF to play nice. At that point, a plain controller and templates look refreshing.

The hidden tax of server side state

JSF keeps view state either on the client as a big token or on the server. That state helps components coordinate, but it also adds bytes to each request and brings memory pressure on the server. When traffic spikes, that state is not free. Load balancing gets trickier, sticky sessions show up, and now you are tuning your Tomcat heap because a table with 50 rows expanded view state by surprise.

State also complicates testing. A simple controller in Spring MVC can be unit tested with little ceremony. With JSF, a lot of behavior hides inside the lifecycle and render kits. You end up using specialized test harnesses or doing more browser level tests. That slows you down on small projects where speed is the whole point.

Finally, components bring a contract you must honor. Combine a JSF data table with custom markup and a bit of JavaScript and you will find yourself reading component source to figure out what it is trying to do. The mental model is not hard, but it is detailed. If your team rotates people or you have junior devs joining, the learning curve is real.

Team fit and delivery speed

Many shops today are comfortable with jQuery, Bootstrap, and a clean controller that returns JSON. Some are poking at Backbone.js and AngularJS. If that is your team, you do not need a server side component system to be productive. You need a quick way to serve pages, a tidy Jersey resource, and a predictable build. Shipping weekly is easier when view logic lives in the browser and controllers stay thin.

Also look at maintenance. Designers want to tweak markup and CSS without reading about view scopes. Ops wants fewer moving parts. A simple stack means fewer cross cutting surprises. Logging a controller, inspecting a JSON payload, and dropping a new template is boring in the best way.

Tooling matters too. While NetBeans and Eclipse have decent JSF support, the happy path depends on which version of Mojarra or MyFaces you pick and how it plays with your app server. A plain Spring MVC setup or a servlet plus a template engine like Thymeleaf or JSP is predictable and easy to debug with just your browser and curl.

JSF vs simpler stacks

Where JSF shines: admin consoles with a lot of data heavy forms, complex component reuse, and teams that already invested in custom components. If you want built in tags, server driven page flow, and rich input handling with converters and validators baked in, JSF gives you that right away.

Where a simpler stack wins: sites with public pages, SEO concerns, content mixed with app bits, and fast front end change cycles. A small REST back end with Spring MVC or plain servlets, templates for server rendered pages, and a thin layer of JavaScript for behavior will be easier to build and cheaper to keep alive. If your UI feels more like a single page app, going with a JSON API and a client framework keeps concerns clean and avoids wrestling with the JSF lifecycle.

Practical checklist before you pick JSF

  • Will the app be mostly forms and tables with server driven flow
  • Do you have people who already know JSF components and lifecycle
  • Are you fine with server side view state and tuning memory for it
  • Do you need SEO friendly pages with clean URLs and cache control
  • How often will the front end change week to week
  • Is most of your data access via REST and JSON or server rendered views
  • Can you test core behavior with simple unit tests or will you need browser tests
  • Are ops ready for cluster sticky sessions or view state tuning
  • Do designers need freedom to edit markup without component rules in the way
  • Could Spring MVC or a small Jersey app plus templates ship faster

If most answers lean to fast UI changes, public facing content, or a JSON heavy flow, pick the simple route. If answers lean to complex forms on an intranet with stable components, JSF can still be a solid pick.

Choose the boring tool that ships your next feature with fewer surprises.

Software Architecture Software Engineering

Post navigation

Previous post
Next post
  • Digital Experience (94)
    • Experience Strategy (19)
    • Experience-Driven Commerce (5)
    • Multi-Channel Experience (9)
    • Personalization & Targeting (21)
    • SEO & Performance (10)
  • Marketing Technologies (92)
    • Analytics & Measurement (14)
    • Content Management Systems (45)
    • Customer Data Platforms (4)
    • Digital Asset Management (8)
    • Marketing Automation (6)
    • MarTech Stack & Strategy (10)
    • Technology Buying & ROI (3)
  • Software Engineering (310)
    • Business of Software (20)
    • Code (30)
    • Development Practices (52)
    • Digital Transformation (21)
    • Engineering Management (25)
    • General Software (82)
    • Productivity & Workflow (30)
    • Software Architecture (85)
    • Technical Implementation (23)
  • 2025 (12)
  • 2024 (8)
  • 2023 (18)
  • 2022 (13)
  • 2021 (3)
  • 2020 (8)
  • 2019 (8)
  • 2018 (23)
  • 2017 (17)
  • 2016 (40)
  • 2015 (37)
  • 2014 (25)
  • 2013 (28)
  • 2012 (24)
  • 2011 (30)
  • 2010 (42)
  • 2009 (25)
  • 2008 (13)
  • 2007 (33)
  • 2006 (26)

Ab Testing Adobe Adobe Analytics Adobe Target AEM agile-methodologies Analytics architecture-patterns CDP CMS coding-practices content-marketing Content Supply Chain Conversion Optimization Core Web Vitals customer-education Customer Data Platform Customer Experience Customer Journey DAM Data Layer Data Unification documentation DXP Individualization java Martech metrics mobile-development Mobile First Multichannel Omnichannel Personalization product-strategy project-management Responsive Design Search Engine Optimization Segmentation seo spring Targeting Tracking user-experience User Journey web-development

©2025 CMO & CTO | WordPress Theme by SuperbThemes