And, finally. JSF is based on a state machine which tracks a lifecycle from the receipt of an incoming HTTP request to the transmission of the corresponding response. It is essential for anyone who wants to become competent in JSF to know that lifecycle and to understand the primary and secondary paths through the JSF lifecycle.
1. JSF is designed to wrap functionality around POJOs. The more JSF-specific code you have written (excepting JSF model objects) in a backing bean, the more likely you did it wrong.
2. EL is not intended as a programming language. Its primary use with JSF is to define references to JSF backing bean properties and actions. If you code application logic on the View, you not only pollute the idiotlogical purity of the MVC paradigm, you create a mess, where you never know if logic is located in the Model or the View or in some unholy interacting cross-connection of both. Complex EL statements are also a royal pain to debug.
3. No, you shouldn't mix JSP's JSTL and JSF view definitions. Even though Oracle's documentation may suggest it. JSTL doesn't play that well with JSF, and almost anything that you can do with JSTL has a much cleaner JSF equivalent.