JSF, Struts 2 ou VRaptor 3?

Olá pessoal, eu uso o JSF em porjetos pessoais mas estou pensando em trocar de framework e queria saber antes se vale a pena.
Vou ser sincero o que me prende ao JSF é mais o richfaces.

Motivos pelo qual quero trocar:

  • Tenho alguns problemas quando quero fazer algo em JS mais personalizado e especifico.
  • Tive problema quando coloquei pluguins do jquery, onde os componentes do richfaces literalmente travaram e não respondiam.

Não sei se esses problemas que estou tendo com o JSF é por falta de conhecimento no JSF ou se são bugs do próprio framework.
Vale a pena trocar o JSF pelo Struts 2 ou VRaptor 3?

Não quero reiniciar a polemica de qual framework é melhor. Quero saber se vale a pena trocar mediante esse problemas?

Não se limite apenas no RichFaces, exitem diversas outras bibliotecas de componentes para JSF, dentre elas destaco o PrimeFaces http://www.primefaces.org/showcase/ui/home.jsf, muito bom e já tem suporte a JSF 2…

Existe também:

http://www.openfaces.org/
http://www.icefaces.com

Qdo vc usa JSF vc geralmente não vai conseguir personalizar muito o resultado gerado (ou vai ser bem difícil fazer isso)

O JSF talvez seja bem produtivo para criar as telas, mas dar manutenção no código do servidor é horrível e, como vc percebeu, personalizar a tela traz vários problemas.

Eu acho que vale a pena trocar sim, existem várias bibliotecas e plugins de JS pra fazer os elementos visuais que são bem fáceis de usar (JQuery UI e ExtJS por exemplo), e você vai ter um controle bem melhor do html gerado e principalmente da parte do servidor.

E, puxando pro meu peixe, o VRaptor3 é bem mais produtivo que o Struts 2

Eu vi o PrimeFaces achei bem interessante.

Tem algum problema em usar o PrimeFaces com o Struts ou o VRaptor?

Pq como já falei tenho porblemas com o JSF quando quero fazer algo mais personalizado.

PrimeFaces é baseado em JSF, não dá pra usar com o VRaptor…

VRaptor++

Desde que passei a usar o VRaptor a produtividade no desenvolvimento voltado para web aumentou muito.

Tem alguma biblioteca de componentes que dê p/usar com o VRpator e/ou Struts?

existem várias bibliotecas de componentes visuais em javascript… por exemplo a ExtJS e o JQuery UI.

a diferença é que vc vai estar trabalhando com HTML+JS ao invés do XHTML do jsf que só declara os componentes

Eu uso a combinação VRaptor no Controller e JQuery na View.

Muito tranquilo e produtivo.

Mesmo usando o vraptor, você pode usar algo parecido com o jsf, quando cria seus proprios “componentes”.
Eu em um projeto anterior fiz isso, peguei o Jquery UI e criei tagfiles em jsp, assim o trabalho ficou bem parecido com o jsf.

Exemplo:

<h:calendar id="calendar" name="pessoa.dataNascimento"/>

Isso pode parecer jsf, mais é tagfiles em jsp + Jquery UI.
Com o tempo fui vendo necessidades de mais “componentes” e fui criando conforme a necessidade. No final das contas eu conseguia criar uma pagina cheia dos componentes, sem mesmo escrever uma unica linha de javascript.

Gostei da abordagem davisnog

Parece ficar legal de trabalhar.

Ainda chego la, para criar componentes rs

Abs

É bem simples trabalhar com tagfiles em jsp, da uma procurada no google vc vai achar varios exemplos, aqui esta um exemplo bem simples.

Dentro de WEB-INF/tags/numeric.tag
Todos os arquivos tagfiles, tem que ter o sufixo .tag, assim como os arquivos jsp tem o sufixo .jsp.
Arquivo numeric.tag

[code]<%@ tag language=“java” isELIgnored=“false” pageEncoding=“UTF-8” dynamic-attributes=“attrs”%>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

<%@ attribute name=“label” description=“Label do Input Text” required=“true” type=“java.lang.String” %>
<%@ attribute name=“name” description=“Nome do Input Text” required=“true” type=“java.lang.String” %>
<%@ attribute name=“id” description=“Id do Input Text” required=“true” type=“java.lang.String” %>
<%@ attribute name=“value” description=“Valor do Input Text” type=“java.lang.String” %>

${label}

[/code]

Nesse caso eu tenho um javascript em jquery que pega essa class"numeric", e seta uma mascara de numeric, onde o input permite somente numeros inteiros e não Strings.

Modo de usar:

<%@ taglib tagdir="/WEB-INF/tags" prefix="h" %> <h:numeric id="num" label="Código do Cliente" name="cliente.codigo" />

davisnog,

Gostei de sua forma de trabalho. Que tal disponibilizar as tags que vc já construiu??

[quote=admwagner]
Gostei de sua forma de trabalho. Que tal disponibilizar as tags que vc já construiu??[/quote]

@admwagner, não vai ser possível, eu não trabalho mais na mesma empresa, então os fontes ficaram lá.

Mais em outro projeto particular que estou fazendo tive a mesma necessidade, então pensando melhor fiz algo mais simples, usando somente classe css e seletores jQuery, fica o exemplo abaixo:

[code]<!DOCTYPE html>
<html>
<head>
<meta http-equiv=“content-type” content=“text/html; charset=utf-8” />

<link rel=“stylesheet” href=“http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/themes/ui-lightness/jquery-ui.css” type=“text/css” charset=“utf-8” />

<script type=“text/javascript” src=“https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js” charset=“utf-8”></script>
<script type=“text/javascript” src=“http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js” charset=“utf-8”></script>
<script type=“text/javascript” src=“http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/i18n/jquery-ui-i18n.min.js” charset=“utf-8” ></script>
<script type=“text/javascript” src="…/js/jquery.maskedinput.js"></script>
<script type=“text/javascript” src="…/js/utils.js"></script>

</head>
<body>
<label for=“datepicker”> Data:</label>
<input type=“text” id=“datepicker” name=“projeto.data” value="${projeto.data}" class=“datepicker”></input>
</body>[/code]

tenho esse arquivo utils.js que tem esse codigo para o datepicker do jquery ui.

$(function() {
    	
	$.datepicker.setDefaults($.datepicker.regional["pt-BR"]);
	$(".datepicker").each(function() {
                $(this).mask("99/99/9999");
		$(this).datepicker({
			showAnim : "blind",
                        showOn: "button",
			buttonImage: "images/calendar.gif",
			buttonImageOnly: true
		});
	});
});

Como esse arquivo utils.js esta no cabeçalho de todas as paginas, quando tenho um input text com a classe datepicker, o jquery já seta o calendario com as configurações que eu previamente setei. Como você pode perceber, tenho um unico javascript que faz todo o trabalho de criar os componentes, dessa forma a minha pagina ainda continua sem nenhum javascript e usando somente html puro.

Dessa forma eu achei que ficou ainda mais simples, os seletores do jQuery são muito poderosos, sabendo usar você faz miséria.

Boa sorte, qualquer coisa estamos por aqui.

valeu a dica. vou estudar este metodo também.

t+

Rapaz, eu conheço bem JSF e Struts, Struts 2, também tenho bom conhecimento do Vraptor hoje.

O que posso dizer sobre as tecnologias:
Eu utilizo vraptor, razões:
Só uso pojos
Fácil manutenção
Excelente integração com todas as bibliotecas que utilizei até agora, e o melhor de tudo: minha view é do jeito que eu quero, sem qualquer dor de cabeça na edição do design.
Meu site é feito em vraptor, minhas demais webapps são feitas no vraptor…
E, na moral, não sei porque as empresas ainda não adotaram o vraptor como framework padrão para seus projetos.
JSF tem bons elementos e excelentes facilidades disponíveis no mercado, porém é tudo bastante amarrado, mas todo mundo vai na onda porque “é uma especificação”…

Defeito que vi no vraptor até agora foi só um, não temos plugins para nossas ides com geração de crud a partir da entidade…
oops, eu fiz um plugin pro meu eclipse pra fazer isso :smiley:
ou seja, não vi mais defeitos.

O que posso fazer com vraptor?
controle de sessão
request
response
acesso a dados
thread control com task scheduler e periodic task
component injection
RCP
acesso a aplicações externas através de NIO (esse é o maior barato)
possibilidade de usar qualquer coisa na view…

Sei que parece loucura, mas eu uso tudo nele
spring
hibernate
quartz (nem é necessário, pq o spring tem task scheduler integrado)
mail api
fileIO
Network IO
jstl
jaxb
log4j

na view
jsp/vm/pdf/xml/arquivos excel/arquivos doc
jquery

Dá até pra fazer joguinho de browser pow.

Visto a camisa do vraptor, me ajudou bastante.

já deu uma olhada no VRaptor Scaffold?

Eu ia criar um tópico para falar sobre JSF2, mas vou aproveitar um espacinho aqui.

Eu já trabalhei em projetos com JSF 2, Struts 1.x e 2. Tenho projetos em JSF 2, que podemos considerar como crítico (24X7), clusterizado .

Gostei do JSF 2, é fácil, produtivo.

No entanto, acho que me decepcionei. Ele é amarrado e tem cheiro de POG. Usando ele ficamos escravos de componentes. Escravos de biblioteca de terceiros. JSF 2 é atraente. Mas ele é sujo. Tonelada de códigos sujos gerados. milhoes de JS importados. Compromete a performance. Já que front-end é um dos maiores problemas de performance (vide o livro: High Performance Web Sites: Essential Knowledge for Front-End Engineers )

Com JSF não temos liberdade na view. Teve projetos que perdi 3 dias de trabalho por causa de bugs de renderização. Coisa que se fosse html, css e jquery resolveria em poucas horas. Ele foi inspirado pelo Aspx que é outro POG. Essa questão de ligar o Model pelo Evento é bacana para Desktop. Web não é desktop. Web é ação, é requisição, é reposta, tudo por http.

Vou voltar para Actions-Based. Quem sabe no velho e bom Servlet (versão 3), e Vraptor 3. (Struts é legado). Se quiser Component-Based, acho melhor fazer Swing.

Sarcasmo on:
Que é isso cara, JSF/JSF2 são especificações hora da Sun, agora da Oracle. São utilizados por praticamente todas as organizações nacionais sérias.

Sarcasmo off:
Na maior, a galera que inventou JSF não sabe como web funciona… só no Brasil que utilizam JSF em grandes projetos.
Eu tive problemas com JSF quando tinha 300 requisições ao mesmo tempo, começou a dar pau geral.

Na moral, qualquer outro framework que te dê liberdade na view evita tais problemas.
No vraptor, por exemplo, tenho dois tipos de validação:
1 com javascript (validação no cliente) - o que evita super estresse no servidor com cálculos de validação
2 com o validator, quando sinto que o camarada do outro lado vai tentar hackear o JS para enviar um formulário com dados truncados - não toma tanto assim do servidor, mas quando as requisições são muitas, melhor deixar o cliente validar o campo com JS.

Srs. venho de desenvolvimento .NET há alguns anos, desde 2002, e já fiz pequenos, médios e grandes projetos… internet e intranet… No último projeto que fizemos utilizamos a biblioteca JQUERY para fazer toda a lógica de negócio (montamos um framework próprio) buscando sanar o GRANDE problema do ASPX em gerar toneladas de código cliente sem necessidade, matando a performance. Chamando webservice para busca de dados e componentes mais leves (JQGRID por exemplo, para renderização) Foi BEM melhor apesar de alguns percalços (não vou entrar no mérito do desenvolvimento do próprio framework…)
Sou profundo admirador da plataforma JAVA e estamos ganhando a oportunidade de desenvolver alguns projetos. (na mesma linha cima)
Venho nos últimos meses estudando o que e como usar, e obviamente já gostei muito da possibilidade de escolher, na MS não tinhamos muito; gostei principalmente da comunidade e sua força, etc…
Comparando JSF e Struts2 notei o ganho de produtividade com um (JSF), porém o mesmo problema do ASPX --> geração de lixo. Primefaces é incrível, mas gera lixo… Vou estudar agora o VRAPTOR através da apostila da Caelum e depois disso decidir qual caminho tomar. (não tenho mais tanto tempo para seguir)
Admito que estou descartando JSF… Vou para linha action pois achei mais leve e onde eu posso fazer a camada cliente mais leve (usando meu framework ou qq um javascript).
Meus comentários acima foram “zipados”, pois há muitas considerações por se fazer…mas gostaria de saber se estou realmente no caminho certo (pelo que vi nos comentários desse tópico, sim!)
Uma dúvida, quais empresas usam VRAPTOR? Isso vai ajudar no convencimento… Quais empresas usam já o STRUTS2?
O VRAPTOR está sendo atualizado? Haverá novidades/melhorias? (se é que precisa)