Questa è una domanda molto ampia, ma per affrontare rapidamente una differenza principale:
- JSF è un framework per generare dinamicamente HTML sul lato server. Qui puoi generare dinamicamente elementi HTML direttamente in base ai tuoi oggetti Java.
- Angolare manipola l'HTML sul lato client. Puoi avere elementi HTML che riflettono il tuo modello in Angolare, ma questi saranno oggetti javascript (JSON) .
I due non si escludono a vicenda - ad esempio, guarda AngularFaces .
Dipende davvero da cosa vuoi fare. Se la tua applicazione è abbastanza statica 'carica una pagina, invia un modulo' allora JSF sarà probabilmente giusto per te. Se c'è un sacco di interazione lato client con diversi elementi HTML in continua evoluzione, allora un framework come Angular o React sarà migliore per te.