Ultimately, an applet can be more powerful for a GUI. Within the frame of the applet, you can control graphics down to the pixel level, and handle events not available to server-side code.
However, applets can't be run just anywhere. A lot of places (especially Windows shops) forbid installation of the client-side JVM needed to run an applet. And I do know people who are running 28KB connections to the Internet, even in this day and age. It would be downright abusive to force them to download a JVM unless there was a really compelling reason.
Server-side technologies such as JSF and
Struts don't have that problem. If you have even a half-way competent web browser, those apps will work with no mods on the client.
My own gut feeling is that once you have a framework, you can develop faster for JSF. That's in large part because the constructs are more limited, and thus simpler. I don't have any scientific data on that, though.
About 2 years back I did a Swing applet. It was for company-internal app where I needed to be able to do flexible editing of data in tabular form. We discussed long and earnestly whether the support group would tolerate it and finally decided that the alternatives were too expensive in terms of time and resources.
These days, I probably would have done that particular app in AJAX, however. I'd enjoy that a lot less than Swing, but it would be more readily received.