Qual é a necessidade do JSF, quando a IU pode ser alcançada com bibliotecas JavaScript como jQuery e AngularJS

116

Eu estava lendo sobre o JSF que é uma estrutura de IU e fornece alguns componentes de IU. Mas como é melhor ou diferente do número de componentes que estão disponíveis em jQueryUI, AngularJS, ExtJS ou mesmo em HTML, CSS e JavaScript simples.

Por que alguém deveria aprender JSF?

sushil bharwani
fonte
3
vantagens do html gerado pelo servidor: capacidade de pesquisa do mecanismo de pesquisa, ocultar visualizações com base na autorização. caso contrário, nós o abandonamos por puro ajax ui.
Neil McGuigan,
5
Eu também abandonei o JSF em favor do back-end AngularJS + RESTful. (Maçãs e laranjas, mas o Angular é tão bom que não preciso de muitos dos benefícios do JSF)
arg20
JSF é uma estrutura MVC baseada em componente que é construída sobre a API Servlet e fornece componentes via taglibs que podem ser usados ​​em JSP ou qualquer outra tecnologia de visualização baseada em Java, como Facelets.
Divyesh Kanzariya

Respostas:

154

JSF para JSP / Servlet / HTML / CSS / JS simples é como jQuery para JS simples: faça mais com menos código. Para usar PrimeFaces ( baseado em jQuery + jQuery UI) como um exemplo, navegue por seu mostruário para ver exemplos de código completos. BootsFaces ( baseado em jQuery + Bootstrap UI) também tem uma vitrine com exemplos de código completos. Se você estudar esses exemplos de perto, verá que basicamente precisa de uma classe Javabean simples como modelo e um arquivo XHTML como visualização.

Observe que você não deve ver o JSF como uma substituição de HTML / CSS / JS sozinho, você também deve levar em consideração a parte do lado do servidor (especificamente: JSP / Servlet). O JSF elimina a necessidade de todo o clichê de reunir parâmetros de solicitação HTTP, convertendo / validando-os, atualizando os valores do modelo, executando o método Java correto para fazer o negócio e gerando o código clichê HTML / CSS / JS. Com JSF você basicamente acaba com uma página XHTML como definição de visão e uma classe Javabean como definição de modelo. Isso acelera muito o desenvolvimento.

Como acontece com todo framework MVC da web baseado em componente, você tem no JSF um controle menos refinado sobre o HTML / CSS / JS renderizado. Adicionar código JS personalizado não é tão fácil, já que você tem que levar em consideração o estado de exibição JSF no lado do servidor (por exemplo, habilitar um botão desabilitado no lado JS não habilitará o botão no lado JSF, que por sua vez é um grande vantagem de segurança). Se isso é, no entanto, um grande obstáculo, então procure uma estrutura MVC da web baseada em ação como Spring MVC . Você apenas levará em consideração que deve escrever todo o código HTML / CSS / JS (e prevenção contra manipulação de XSS, CSRF e DOM!) Por conta própria . Além disso, se você voltar do Facelets para o JSP, também perderá os recursos avançados de modelagem.

Por outro lado, se você tiver um grande site baseado em JSP / Servlet / HTML / CSS / JS / jQuery e quiser refatorar o código repetido JSP / Servlet / HTML / CSS / JS / jQuery em componentes reutilizáveis, uma das soluções seria o JSF. Modelos personalizados, tagfiles e componentes podem ajudar nisso. Nessa perspectiva, JSF está acima de JSP / Servlet / HTML / CSS / JS / jQuery (e é também por isso que é muito importante entender esses fundamentos antes de mergulhar em JSF).

Você pode encontrar um projeto baseado em JSF inicial do mundo real aqui: Aplicativo Java EE Kickoff . Você verá que ele contém ao lado de JSF como bons HTML5 , CSS3 e jQuery .

Veja também:

BalusC
fonte
15
Faça mais com menos código? Mas com mais xml ... que troca ... além disso, rouba sua flexibilidade
Danubian Sailor
33
No JSF 2.0+, o xml não é necessário.
Cagatay Civici
5
Temos anotações em JSF 2.0
VdeX
1
Parece que não há uma delimitação clara entre a camada de negócios / controlador e a visualização, com JSF, uma vez que grande parte da visualização é gerada no servidor. Eu entendo que tudo é compilado no servidor antes de ser enviado para o navegador, mas eu prefiro meu objeto Java retornando dados que o modo de exibição renderiza, em vez de enviar dados / lógica de renderização.
rick
1
concordo que JSF é uma coisa do lado do servidor com controle poderoso sobre HTML.
Plain_Dude_Sleeping_Alone
28

O JSF foi criado para que as lojas de java não precisassem aprender coisas como jQuery e construir JS complexos, mas focar em uma pilha puramente Java. Em um mundo onde tempo é dinheiro e muitos lugares já focados no desenvolvimento Java, uma linguagem / peça a menos na pilha torna o treinamento e a manutenção mais rápidos e, portanto, mais baratos.

Acrescentarei que JavaScript é fácil de se tornar um pesadelo de manutenção em grandes equipes, especialmente se alguns dos desenvolvedores do projeto não são muito experientes na web.

Andrew White
fonte
Então, se estou bastante confortável com JQuery JS etc. Não preciso me concentrar em JSF?
sushil bharwani
2
Tudo depende do problema que você está tentando resolver e com qual equipe está resolvendo.
Andrew White
1
Concordo com a equipe, mas estou interessado em aprender quais problemas diferentes o JSF pode resolver e o js jQuery etc não pode. Só estou tentando criar motivação para aprender JSF.
sushil bharwani
1
Nenhum, apenas fornece uma maneira diferente de resolver os mesmos problemas.
Andrew White
8
Mesmo se você estiver realmente confortável com o JQuery, o JSF ainda é muito útil. Ele fornece uma maneira fácil de conectar o código do lado do servidor às representações do lado do cliente. Alguns 'componentes compostos' do Facelets são apenas um invólucro bastante fino em torno de HTML e JS (incluindo JQuery). Eles são fáceis de construir e, em geral, apenas tornam mais fácil toda a conexão do lado cliente-servidor.
Arjan Tijms
23

Com Javascript e estruturas como jQuery, você tem total flexibilidade e controle total. Com ext's etc você perde muito controle e deve se adaptar ao framework. Com o JSF você perde totalmente o controle e deve se adaptar totalmente ao framework. Você é chamado em ciclos de vida etc. e, finalmente, você não tem controle quando a chamada para o servidor pode ser feita e onde não pode. Se você vai fazer algo considerado 'especial', você está em uma posição muito difícil. E no mundo JSF, mesmo coisas básicas como classificação de tabelas com várias colunas ou campos onde você pode digitar apenas um conjunto limitado de caracteres (como campo de número) são consideradas 'especiais'.

No entanto, quanto mais flexibilidade você tiver, mais erros ou práticas inadequadas poderá cometer. A alta flexibilidade funciona apenas com programadores altamente inteligentes; outros transformarão o projeto em um pesadelo incontrolável.

Mas, com JSF e sua flexibilidade limitada, sempre há apenas algumas (ou mesmo apenas uma) maneira correta de fazer algo. Você é muito limitado, não pode fazer atalhos, deve escrever mais XML etc. - mas ao se adaptar ao padrão, há melhor controle sobre o código que os programadores inexperientes ou pouco qualificados irão produzir. Como resultado, as grandes corporações amam o JSF porque é "mais seguro" para elas.

Quando mudei do GWT para o JSF, fiquei chocado com quantas coisas, que eram naturais para mim, eram consideradas altamente atípicas e com quantas coisas simples eram tão difíceis de conseguir. Além do mais, até mesmo fazer as menores alterações, como adicionar ':' sinal após rótulo, que no aplicativo GWT / jQuery desenvolvido estaria alterando um rótulo de geração de função, exigia a alteração de dezenas de arquivos com propriedades localizadas, o que nem mesmo foi considerado por qualquer um exceto eu estranho ...

Marinheiro danubiano
fonte
7
PrimeFaces é baseado em jQuery para que você tenha muita flexibilidade no lado do cliente. Além disso, os componentes do PrimeFaces fornecem muitos ganchos no lado do cliente e do servidor como callbacks de eventos para você personalizar. APIs Javascript podem ser substituídas e CSS também para aparência personalizada. : o rótulo pode ser configurado globalmente em web.xml para um caractere mais amigável ao jQuery.
Cagatay Civici
1
Acordado. A regra geral é: o uso de nenhuma estrutura requer programação javascript avançada e será difícil de manter, mas permite um poder e complexidade significativamente maiores, enquanto a confiança em estruturas será mais fácil de construir e manter, mas limitará a capacidade potencial do aplicativo.
KTys
10

Os benefícios de usar JSF não estão apenas em gerar xhtml + css + js. Às vezes, o JSF impõe uma restrição à marcação que você pode gerar, como qualquer estrutura baseada em componente. Mas o JSF não serve apenas para isso, seu estilo de vida ajuda muito. Depois de validar a entrada, ele pode atualizar o modelo e sincronizar seus beans do lado do servidor sem nenhum esforço. você apenas diz "o que quer que o usuário digite aqui, verifique se é um número, se sim então armazene na propriedade YY no objeto XX" e o JSF fará tudo isso.

Então, sim, você ainda pode usar JQuery, JS, etc. Mas JSF oferece muitos benefícios quando se trata de escrever código do lado do servidor e evita muitos problemas.

arg20
fonte
9

Eu discordo veementemente que jsf acrescente algo. Isso apenas adiciona sobrecarga. Fazer coisas de interface do usuário no servidor é a coisa mais ridícula que eu já ouvi. E o javascript em grandes equipes funciona muito bem - é chamado de reutilização de código.

Apenas envolva o jquery em algumas tags jsp, isso é tudo que você precisa e está feito, e não suporte os .hackles e problemas de escalabilidade com.jsf e richfaces.

guwst
fonte
14
JSF é voltado para aplicativos baseados em formulários. jQuery é bom (diabos, muitas bibliotecas de componentes JSF populares como PrimeFaces, RichFaces e IceFaces até mesmo usam isso nos bastidores), mas jQuery não simplifica o processamento de envios de formulários no lado do servidor de forma alguma. Usar JSP / Servlet simples resultará apenas em um terrível código clichê. Novamente, JSF não é apenas HTML / CSS / JS, mas também JSP / Servlet.
BalusC
2
Acho que se você ler mais sobre o JSF em geral e sobre o ciclo de vida de uma página JSF especificamente, pode mudar de ideia. Então, novamente, você não pode.
Ahmed Anwar
5

Tendo trabalhado com JSF, Spring MVC, Struts, Grails, JQuery e ExtJS, minha opinião é que Grails + ExtJS é uma combinação poderosa.

Eu escolheria Grails em vez de JSF qualquer dia. Eu gosto da integridade do ExtJS como a biblioteca e estrutura do lado do cliente, mas ele vem com uma curva de aprendizado mais íngreme do que JQuery.

dbrin
fonte
3

Aqui estão as maiores diferenças entre jQuery e JSF:

  • sem arquitetura MVC
  • sem controle de estado (data de armazenamento na sessão ou conversa, limpeza automática, etc.)
  • não (padrão) biblioteca de validação
  • nenhuma biblioteca de modelos
  • sem navegação / roteamento avançado
  • lado do cliente

jQuery nunca foi planejado para ser usado como um webframework full stack. Era mais voltado para substituir o código JS de baixo nível para que escrever JS se tornasse mais fácil e mais poderoso em menos linhas de código.

E, portanto, deve ser usado principalmente para adicionar comportamento em elementos HTML.

Serkan
fonte
2

Tendo usado a estrutura ExtJS para um grande aplicativo da web, sei como é fácil de usar. O ExtJS (Schena) é mais adequado para interações de banco de dados (Oracle 11g) na arquitetura MVC. A Visualização era para as interações visuais / do usuário. O controlador especificou o 'processamento' e os gatilhos que precisavam ser usados ​​nos pacotes PLSQL (a API para o CRUD, consultas de seleção SQL etc.). O modelo e os arquivos de armazenamento foram usados ​​para 'mapear' os itens de dados para o Viewer / entradas.

ExtJS não é adequado para interfaces da web sem uso intensivo de banco de dados - onde Angular JS pode ser uma opção melhor.

Lukas Knaf
fonte