[quote=lucasmurata]Posso citar vários motivos do porque o JSF ser um lixo e ser fail. Motivos técnicos, pragmático, comunitario e pessoal.
Primeiro gostaria de salientar, antes que digam que nao conheço o framework tecnicamete, tenho sim experiencia com JSF 2. Estudei livro e tutoriais, desenvolvi um sistema do zero (que inclusive esta rodando em produção com sucesso e estamos migrando para VRaptor). Usei JSF 2 mais de 1 ano. Entao não é de repente que eu e outros desenvolvedores Java chegamos a esta conclusao do JSF ser ruim. São muitos os desenvolvedores Java com esta visão.
Posso citar aqui alguns motivos rapidamente para que o meu post nao fique grande:
1 - Dependecia excessiva de biblioteca de terceiros. Tente desenvolver voce mesmo seus componentes sem usar Prime, Open ou Richfaces. Para isso voce precisa entender o ciclo de vida de uma requisicao em JSF, e criar voce mesmo seus componentes em cima desse ciclo que nao é nada elegante. Ah, faz assim, cria um componente que renderiza rapido no browser e que trabalhe com requisicoes GET, PUT ou DELETE. Boa sorte.
2 - Voce ja lidou com um usuario de sistema? Voce esta usando seu componente pronto em Primefaces. Seu cliente pede pra voce mudar uma coisa no seu Datatable. Boa sorte com as gambiarras. Ou faz o seguinte: espere por uma atualizacao do Rich ou Primefaces que demoram eternidade para ver se vem com a mudanca.
3 - Impressao que da é que JSF nao foi desenhado para WEB. HTTP? REST? HTML, CSS e JS? XHTML do JSF 2 é um xml sem flexibilidade. Tente ter um controle fino de Javascript, de Ajax e de CSS. Tente estilizar seus componentes. Voce verá estrelinhas rodando na cabeça.
4 - Mistura entre cliente-side e server-side, acho que este é o seu pior ponto. Nao há transparencia. Voce chama componete da View no seu ManagedBean, e chama ManagedBean no seu View. Atualmente eu utilizo uma arquitetura que me permite independecia entre Client e Server usando VRaptor e Rails. O desenvolvimento Web tende a isso.
5 - Muita imaturidade para um projeto que esta ai desde 2003. Sao quase 9 anos. Nao vejo amadurecimento. Na web a evolucao é muito rápida. Menos com JSFail que é um framework mal acabado. 9 anos pra sair da versao 1 pra 2?
6 - Ele é Statefull e depende muito de sessions por ser component-based.
7 - Ele é um atrativo para os novatos e para os que nao gostam de estudar. “Olha! É tao simples. Basta esta tag e aparece esse componente!!” e caem na armadilha.
8 - Pesquise no proprio GUJ quantos e quantos topicos sobre, por exemplo, atualizar uma combobox com outro, combobox aninhados, atualizar datatable, etc, em JSF. Sao muitos desenvolvedores batendo a cabeça numa coisa que com jQuery + Ajax faria rapidamente.
9 - Sucetivel a POG, mesmo voce seguindo boas praticas no backend.
10 - Quase impossivel de integrar com outras tecnologias. Uma vez JSF, seu projeto sera JSF.
E posso citar tambem outros motivos.
Olha aqui uma lista de grandes figuras e desenvovedores Java criticando JSF (citacoes de 2004 a 2011): http://ptrthomas.wordpress.com/2009/05/15/jsf-sucks/ (JSF Sucks). Tem inclusive o video do James Gosling, pai do Java dizendo: “I hate JSF with a passion” - Eu odeio JSF com paixao. Isso pode te ajudar a se definir tecnicamente o que é mais importante.
Ponto positivo do JSF:
1 - Fazer CRUD. Ok, voce vai viver de CRUD?
Hoje tem tanta coisa legal pra aprender e usar nos seus projetos. Largue o JSF, livre-se enquanto é tempo. Estude frameworks Restful como Vraptor, Rails, Grails, Play, aprenda Javascript (de verdade), para view use Extjs, jQuery UI, YUI, Dojo toolkit. Faça o que quiser. Mas nao contribua para que este cancer chamado JSFail se alastre na comunidade Java.
[/quote]
bom…descordo da maioria, alguns dos seus argumentos por outro lado considero válidos mas vamos la:
1 - Ué não é uma coisa completamente normal ter bibliotecas de terceiros quando desenvolvemos na plataforma java? Vai me dizer que nunca reparou na quantidade que o hibernate por exemplo usa? Quanto a trabalhar com requisições put, delete, etc, se você precisa fazer isso, você pode integrar o jsf com spring e usar o controller do spring para isso, me parece uma excelente dupla mesmo que você não precise disso.
2 - Eu não tive estes problemas… com um simples reRender e o código de como tem que ficar nesse caso você resolve isso (e não é nenhuma gambiarra).
3 - Você tem como chamar funções js suas no que você precisa na imensa maioria dos casos, normalmente em algum evento de algum componente, até hoje no que eu precisei (normalmente chamar em algum evento como onblur da vida) nunca tive problema. Quanto a css os componentes tem um styleClass, isso normalmente resolve meu problema (nem preciso tanto por que normalmente deixo o estilo pego do skin do rich faces…). Casos onde isso não atende são bem raros (normalmente é por que o programador “quer” fazer com js, não por que ele “precisa”).
4 - Pera ai, você tem como chamar componente do managed bean na view e da view no managed bean e não ha transparência? A unica coisa que vejo de ruim ai é um possível mau uso, um uso excessivo de binding. Tem casos onde considero uma boa por exemplo para preencher menus, mas acho que tem que ser o minimo usado possível por uma questão de camadas.
5 - Eu concordo quanto a lerdeza neste ponto, poucas versões novas saem… mas isso não muda o fato de que jsf 2 hoje é um framework recente e bem aceito pela comunidade, bastante produtivo.
6 - De uma forma geral ele é statefull, o comum com ele é que muitos managed beans fiquem com escopo de sessão e muitos dados dados fiquem carregados, mas não é dificil trabalhar com estes beans em escopo de requisição e passando parâmetros via get por exemplo. Para ser sincero eu acho que certas coisas vale bem mais a pena ser statefull mesmo por que não pesam na memória, podem ser aproveitadas por vários dos muitos usuários logados (configurações relacionadas a perfil de acesso por exemplo) e assim evitam novos acessos a base de dados, além de ser mais fácil programar assim, o problema é quando o individuo deixa tudo statefull, mas isso não é problema do framework, mas sim de quem o usa.
7 - Ele é mesmo um atrativo para novatos por que esse negocio de “só por a tag” faz parecer que é simples programar com jsf, e na verdade é simples mesmo, mas programar “bem” envolve conceitos que estes novatos normalmente não conhecem ou ao menos não na prática. Ai que entra o problema mas novatos vão fazer “novatisses” com qualquer framework…
8 - Cara isso de preencher um combobox depois que o usuário selecionar uma opção no outro usando jsf (com algum outro add como o rich ou o prime) é uma coisa simples, com o rich por exemplo é só colocar no primeiro um a4j:support no evento onblur chamando o método que preenche os itens do segundo combo e colocando no reRender um painel de onde esteja o segundo para atualizar. Se tem um monte de tópico perguntando sobre isso é por que tem um monte de gente que não conhece abrindo tópico perguntando, mas é simples sim.
9 - Qualquer framework é suscetível a pog. Nunca duvide da criatividade de certos individuos e como eu disse novatos vão fazer “novatisses” com qualquer framework…
10 - Integrar com outras tecnologias tipo o que por exemplo?
quanto ao ponto positivo que você deu, bom acho que não é novidade pra ninguém que você foi meio tendencioso quanto a isso.