If the changes are really radical you could go as far as providing a separate WAR for each client - I'm assuming most the logic is implemented in an
EJB tier. However, that would really trample all over the DRY principle and could be a maintenance nightmare.
If you're going to have heaps of clients, and they all want to customize their view, then maybe you could try using a kind State
pattern object. Store client preferences in a database table mapped to an entity. Based on the current client use the entity as a kind of 'state' which gets delegated to when determining if a component gets displayed. This way you avoid an explosion of nasty conditional statements all over the place. If you're using
JSF it'd be a piece of cake to hook this into the 'rendered' property.
SCJP, SCWCD, SCBCD, SCEA 5