#1 rule for JSF. The more complex your solution, the more likely it's wrong.
One of the core design principles of JSF is Inversion of Control. In IoC, things don't "go out and get" other things (that's what Service Locators are for). Instead, they sit there all fat and happy and get them delivered via Injection.
JSF does this via Managed Properties. In JSF1, you defined Managed Properties in the faces-config.xml as part of your Managed Bean definition. That still works in JSF2, but you also can use the "@ManagedProperty" annotation. Like so:
This will cause JSF to invoke your setUserId() property access method to set the userId property without the need for gnarly JSF-specific code.
An IDE is no substitute for an Intelligent Developer.