An (almost) comprehensive list of Web Components
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
- Formatted i18n data
- Date entry/display
- Time entry/display
- Currency entry/display
- Flat Tree
- Static Progress Status
This is pretty basic – and Servlet 3.0 just added it.
These can currently be done with converters and validators, but is there a better way?
A bar which indicates percent complete, a static version of the Ajax version below
A radio button that works with a table.
There’s new stuff coming up – should we start to care? IE is, as usual, the lone holdout.
Components for navigating from one page to another.
- Breadcrumb Trail
- Navigation List
- Navigation Tree
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.
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.
Like a Navigation List, but with hierarchical categories
Components that deal with identity and authorization.
- Java EE Login
- Forgotten Password/Username
This one would seem to be a no brainer, but it’s actually a bit hard to get right.
If you log in, you should be able to log out.
Probably not possible in a fully reusable way, since Java EE doesn’t specify a standard registration API.
Same problem as Register
This would be very useful, but probably not amenable to standardization, since the robots keep getting smarter.
Simple Rich UI
- Tabbed Pane
- Popup Menu
- Tag Cloud
- CommandBar (icon button)
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.
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.
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.
Analog slider to choose a numeric value, or manually enter a value.
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.
A special case of a spinner, for picking a time.
A very special case, but easy to implement.
Alert box, with two or more buttons.
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.
I’m frankly not convinced of the usefulness of this particular visualization, but many designers seem to love it.
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?
Drop down menu bar. Many HI people hate them on the web.
Essentially, a horizontal strip of buttons.
Filthy Rich UI
Really elaborate graphical components. Harder to do as a standard, since styling becomes so important.
- EditText (in place edit)
- Shuttle (Switch List)
- Collapsible Tree
Like Apple’s cover flow, flip through a set of images to select one.
Just because I’ve never seen it implemented well doesn’t mean it’s useless.
Easy to do, but hard to get right, I’ve implemented it as a demo in Mojarra 2.0.
Fairly common, I’ve implemented it as a demo in Mojarra 2.0.
Essentially a static version of the AutoSuggest component, below.
Tomahawk has had a tree for years.
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.
Things that are probably best implemented as behaviors.
- Clientside Validation
Probably almost trival to implement.
The opposite of trivial to implement, it could still be incredibly useful. Some support in various JSF component sets already.
A customer request since year 2000.
- Progress Indicator
- Busy Status Indicator
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.
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.
Relying on an external service means that this is probably not suitable for standardization.
Progress of a server operation
Essentially a binary version of Progress Status
I’m sure I’ve left some out – suggest more in the comments…
(This article originally published on my java.net blog on October 14, 2009.)