Skip to main content

An (almost) comprehensive list of Web Components

Posted by driscoll on October 14, 2009 at 11:27 AM PDT

In talking with Andy Schwartz before our recent talk together at Oracle Open World, Andy mentioned that he'd like to see some new components make it in to JSF 2.1.

I'd like to see that too - but what new components? To aid the discussion, I thought it might be handy to make up a list of components that I think would be handy for JSF - but please, don't take this as an endorsement of any particular component for inclusion into the spec. At best, I can see us adding only a handful, perhaps 3 or so. Still, once started, this kind of project becomes it's own end - so I decided it might be good to publish such a list. Many of these components already exist in some form or another for JSF, or as a JavaScript Widget that could be wrapped in a JSF component - so most of them are available today.

Basic Html

Most of the basic HTML components are already well covered, but there would seem to be a little room for a few very basic components

  • File Upload
  • This is pretty basic - and Servlet 3.0 just added it.

  • Formatted i18n data
  • These can currently be done with converters and validators, but is there a better way?

    • Date entry/display
    • Time entry/display
    • Currency entry/display
  • Flat Tree
  • A very basic hierarchical data visualization component that has no JavaScript required.

  • Static Progress Status
  • A bar which indicates percent complete, a static version of the Ajax version below

  • SingleRowSelect
  • A radio button that works with a table.

  • HTML5
  • There's new stuff coming up - should we start to care? IE is, as usual, the lone holdout.

Navigation

Components for navigating from one page to another.

  • Breadcrumb Trail
  • Almost standard on many sites now, a horizontal list, often limited to three deep, that allows you to backtrack through your history without the back button.

  • Navigation List
  • A fairly straightforward list of links that navigate to different pages in the site. Often put in a Navbar on the left of the page.

  • Navigation Tree
  • Like a Navigation List, but with hierarchical categories

Security

Components that deal with identity and authorization.

  • Java EE Login
  • This one would seem to be a no brainer, but it's actually a bit hard to get right.

  • Logout
  • If you log in, you should be able to log out.

  • Register
  • Probably not possible in a fully reusable way, since Java EE doesn't specify a standard registration API.

  • Forgotten Password/Username
  • Same problem as Register

  • Capcha
  • This would be very useful, but probably not amenable to standardization, since the robots keep getting smarter.

Simple Rich UI

  • Framebuster
  • The war between the framers and the framebusters means that this will be obsolete almost immedately on release, but it might be worthwhile to try.

  • Tabbed Pane
  • Basic Web component or rich component, depending on whether you use DHTML. Since DHTML is probably easier for the end user, it's my preference to have it in this list.

  • Spinner
  • Increment an integer value by a set amount at the press of a button, or manually enter a number. Implemented as a demo in Mojarra 2.0.

  • Slider
  • Analog slider to choose a numeric value, or manually enter a value.

  • Calendar
  • Need to also include options to pick a date, or only a month, or even only pick a year. May be hard to do reusably, since styling matters so much. Wrapped a YUI Calendar widget as a component as a demo in Mojarra 2.0.

  • TimeSpinner
  • A special case of a spinner, for picking a time.

  • ColorPicker
  • A very special case, but easy to implement.

  • ModalWindow
  • Alert box.

  • ModalDialog
  • Alert box, with two or more buttons.

  • Popup Menu
  • FloatingWindow
  • A detached embedded window, that you can move around within the HTML frame or window that contains it. After a brief burst of popularity, I've seen usage drop off.

  • Tag Cloud
  • I'm frankly not convinced of the usefulness of this particular visualization, but many designers seem to love it.

  • TabularData
  • A table that's modeled on a database set, rather than being explicitly bound to the HTML table. Would include sorting, at a minimum, and also probably reorder of rows. Maybe even filtering?

  • Menubar
  • Drop down menu bar. Many HI people hate them on the web.

  • CommandBar (icon button)
  • Essentially, a horizontal strip of buttons.

Filthy Rich UI

Really elaborate graphical components. Harder to do as a standard, since styling becomes so important.

  • Carosel
  • Like Apple's cover flow, flip through a set of images to select one.

  • Accordian
  • Just because I've never seen it implemented well doesn't mean it's useless.

  • EditText (in place edit)
  • Easy to do, but hard to get right, I've implemented it as a demo in Mojarra 2.0.

  • Shuttle (Switch List)
  • Fairly common, I've implemented it as a demo in Mojarra 2.0.

  • ComboBox
  • Essentially a static version of the AutoSuggest component, below.

  • Collapsible Tree
  • Tomahawk has had a tree for years.

  • RichTextEdit
  • Several good JavaScript widgets exist for this functionality.

  • RSSReader
  • Update a page automaticially with the latest blog posts. Far more useful than you might first think, since many programs (like hudson, for instance) now export data as RSS.

  • Slideshow
  • A fairly complex JavaScript widget.

  • Lightbox
  • An incredibly complex JavaScript widget for organizing images.

  • Charting
  • Incredibly complex, and incredibly useful, this is probably best done as a completely separate software product. Some JavaScript widgets already exist, and some JSF components already support this...

Behaviors

Things that are probably best implemented as behaviors.

  • Tooltip
  • Probably almost trival to implement.

  • DragAndDrop
  • The opposite of trivial to implement, it could still be incredibly useful. Some support in various JSF component sets already.

  • Clientside Validation
  • A customer request since year 2000.

Ajax

  • AutoSuggest
  • The "shopping cart" of the Ajax world. Note that Andy is working on a demo that implements this as a behavior. Supported as a component in some JSF component sets.

  • Poll
  • Besides periodic updates, also handy for keeping sessions alive, and avoiding many cases of view expiration. Less necessary if we implement Comet, but probably still useful as simpler solution.

  • Map
  • Relying on an external service means that this is probably not suitable for standardization.

  • Progress Indicator
  • Progress of a server operation

  • Busy Status Indicator
  • Essentially a binary version of Progress Status

More?

I'm sure I've left some out - suggest more in the comments...

Related Topics >>

Comments

So, after almost a year, what

So, after almost a year, what was decided? Such that it matters, I would have chosen: 1) Login/Logout. JSF is part of Java EE, and any enterprise app needs a login. Lots of examples out on the web, all of them crummy. 2) Ajax busy - why not. 3) Tooltips - why not 4) File upload - part of the Java EE spec, so tie it together. As for the rest, 3rd party libraries do a nice job. Nice job on 2.0. A huge improvement over 1.2.

More of them...

More features that a full-blown component library should have, and which might make sense for a JSF 2.1 version. I'll categorize in essentials and nice to have:

Essential:
  • singleRowSelect (radio-button in a table, small thing, but essential)
  • subform
  • sorting on the table
  • some more layouting support (at least colspan/rowspan support )
Nice to have:
  • reorder, filter columns on a table
  • tree-table
  • layouting support: a sophisticated layout manager
  • something to remember the current focus of elements on postback, and the scroll-state (should this be handled in a component?)
  • multi component validator (component?)
  • range-field (from/to)
  • progress bar
  • wait page (component?)
regards,

Martin

Check out for example

Check out for example Coldtags suite at http://servletsuite.com/jsp1.htm But the real competitors here are JavaScript widgets (e.g. from JQuery).

Dojo and YUI are better examples, I think

jQuery has a lot of good functionality, but almost no widgets to speak of - they've got what, 6? Dojo and YUI, on the other hand, have dozens.

jQuery is better thought of as a DOM DSL, rather than a widget set - their widgets have always seemed more of an afterthought.

I've already examined Dojo and YUI in putting together the list above.

Good suggestions, some comments

I've added the progress bar - that was obvious, and it being left out was a transcription error when I copied from my notes. I also added a busy status indicator.

The ordering of rows on a table would be part of some new table that we'd implement - I'll have to update the TabluarData comment to reflect that. Same with reorder of columns, and perhaps filtering, though that sounds like that may be a bit much for standardized table.

SingleRowSelect seems limited but useful - I think it goes under Basic HTML, right?

Multicomponent validation doesn't really seem to be a component level feature, nor does layout managment - but I'd love to hear how you think they'd work.

I'd like to see focus be part of the view component - I had a request for that in 2.0 that got turned down. Having it be a component is problematic - there can only be one focus per page.

Can't you already do tree tables with facets?

Can't we get subform functionality with f:ajax? Maybe I need to add a separate validation section, but that really seems out of scope for what I was trying to do :-)