A good developer need to understand the business, and as as a minimum understand that you are being hired to create solutions to business problems.
Be able to look at a business, see and understand the problems the business currently faces, innovate to solve said problems, and then are able to communicate with a non-technical audience the business benefit of the technical solution. Focus more on understanding the customer than on understanding the technology ('though you need both, of course).So, things like usability are critical.
Another crucial component of any good developers repertoire is change management, a good developer has to not just cope with change, but embrace it. When you approach a problem domain you look at it without thinking about the technology. You look at it from a business perspective, find the requirements, the end-users etc and then once you have done that you then decide on the technology. Now this may be a Java solution, but then maybe it is a .NET one or PHP or VB or whatever it has to be right for the business. I would expect any developer to be able to adapt and to pick up whatever the choice may be and become productive. The forementioned reason is why I am unimpressed with those who can recite the Java API from memory, my personal feeling on this is that you should now what is available (whether it be in Java, PHP, Perl, C/C++ whatever) from a higher level and not confine yourself to a particular technical space. However, how to use it (ie the API) you don't need to know to a great level of detail until you actually start the work.