JSF está maduro ou apenas começando?

Olá Pessoal,

Depois de passar uns 2 ou 3 dias varendo os forums na internet em busca da solução para um problema (JÁ RESOLVIDO FINALMENTE), definitivamente me veio está pergunta: JSF está maduro ou apenas começando?.

Vejam abaixo o “RESUMO” do meu problema para chegar a esta questão:

Título:
Problema de Incompatibilidades entre Browsers e componentes JSF

Tarefa:
Criar um link que ao ser clicado, abre a tela de download de um relatório. No link deseja-se passar como parâmetro o formato do relatório desejado (PDF ou RTF).

Tentativa Inicial de Solução:
Como o padrão do projeto é ajax e estamos usado RichFaces, o normal seria usar as tags do RichFaces, conforme abaixo:

<a4j:form>
	<a4j:commandLink action="#{relResgatesBean.download}">
		<h:graphicImage value="/sistemaweb/images/pdf.gif" width="32" height="32" />
		<a4j:actionparam name="relatorioTipo" value="PDF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</a4j:commandLink>
	
	<a4j:commandLink action="#{relResgatesBean.download}">
		<h:graphicImage value="/sistemaweb/images/rtf.gif" width="32" height="32" />
		<a4j:actionparam name="relatorioTipo" value="RTF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</a4j:commandLink>	
<a4j:form>

Problema A:
O código da action #{relResgatesBean.download} que abre a tela de download não funciona com o a4j:commandLink do RichFaces.

Solução A:
Usar o <h:commandLink>. Agora o código ficou assim:

<a4j:form>
	<h:commandLink action="#{relResgatesBean.download}">
		<h:graphicImage value="/sistemaweb/images/pdf.gif" width="32" height="32" />
		<a4j:actionparam name="relatorioTipo" value="PDF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</h:commandLink>
	
	<h:commandLink action="#{relResgatesBean.download}">
		<h:graphicImage value="/sistemaweb/images/rtf.gif" width="32" height="32" />
		<a4j:actionparam name="relatorioTipo" value="RTF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</h:commandLink>	
<a4j:form>

Problema B:
Se o arquivo .xhtml que contém esse código JSF da “Solução A” for carregado normalmente no Internet Explorer ou no Firefox ele funciona normalmente.
Como o projeto usa AJAX, esse código vem via AJAX, e ai ocorre o Problema B. Quando se carrega via AJAX esses <h:commandLink> não funcionam no Firefox.

Solução B:
Se trocarmos os camponentes <h:commandLink> para <h:commandButton> funciona. Agora o código ficou assim:

<a4j:form>
	<h:commandButton action="#{relResgatesBean.download}">
		<h:graphicImage value="/sistemaweb/images/pdf.gif" width="32" height="32" />
		<a4j:actionparam name="relatorioTipo" value="PDF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</h:commandButton>
	
	<h:commandButton action="#{relResgatesBean.download}">
		<h:graphicImage value="/sistemaweb/images/rtf.gif" width="32" height="32" />
		<a4j:actionparam name="relatorioTipo" value="RTF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</h:commandButton>	
<a4j:form>

Problema C:
Como agora temos um botão ao invés de um link, caimos num problema de design. Não podemos mais usar o <h:graphicImage>.
Mas como quero um ícone ao invés de um botão, tenho que camuflar o botão. Ou seja, altero o CSS do botão para ele ele pareça um Link de Ícone.

Então criei o seguinte CSS:

input[type="submit"].buttonPdf,
input[type="submit"].buttonRtf {
	background: url('../images/icones/pdf.gif');
	width:32px;
	height:32px;	
	border: 0px;
	padding: 0px;
	cursor: pointer;
}

input[type="submit"].buttonRtf {
	background: url('../images/icones/rtf.gif');
}

Agora o código ficou assim:

<a4j:form>
	<h:commandButton action="#{relResgatesBean.download}" value="" styleClass="buttonPdf">
		<a4j:actionparam name="relatorioTipo" value="PDF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</h:commandButton>
	
	<h:commandButton action="#{relResgatesBean.download}" value="" styleClass="buttonRtf">
		<a4j:actionparam name="relatorioTipo" value="RTF" assignTo="#{relResgatesBean.relatorioTipo}"/>
	</h:commandButton>	
<a4j:form>

Problema D:
Voltando ao JSF, como agora temos um botão, os parâmetros não funcionam a4j:actionparam. Neste caso foram encontradas duas possíveis soluções:

Solução D1:
Usar um “actionListener” ao invés de “action” e um <f:param> ao invés do a4j:actionparam. O código ficaria assim:

<a4j:form>
	<h:commandButton actionListener="#{relResgatesBean.download}" value="" styleClass="buttonPdf">
		<f:param name="relatorioTipo" value="PDF" />
	</h:commandButton>
	
	<h:commandButton actionListener="#{relResgatesBean.download}" value="" styleClass="buttonRtf">
		<f:param name="relatorioTipo" value="RTF" />
	</h:commandButton>	
<a4j:form>

Teríamos que alterar o Bean conforme abaixo:

public void download(ActionEvent event) {   
   UIParameter parameter = (UIParameter) event.getComponent().findComponent("relatorioTipo");   
   String relatorioTipo = parameter.getValue().toString();
   ...
} 

Obs: Não cheguei a testar mas talvez se usar a4j:actionparam ao invés de <f:param> também pode funcionar com a Solução D1.

Solução D2:
Usar o componente do Tomahawk <t:updateActionListener> ou invés de: <f:param> ou a4j:actionparam

O código ficaria assim:

<a4j:form>
	<h:commandButton action="#{relResgatesBean.download}" value="" styleClass="buttonPdf">
		<t:updateActionListener property="#{relResgatesBean.relatorioTipo}" value="PDF" />
	</h:commandButton>
	
	<h:commandButton action="#{relResgatesBean.download}" value="" styleClass="buttonRtf">
		<t:updateActionListener property="#{relResgatesBean.relatorioTipo}" value="RTF" />
	</h:commandButton>	
<a4j:form>

Comentário 1:
Como já tinha o Tomahawk no projeto, acabei optando pela Solução D2.

Comentário 2:
Na época para usar o Tomahawk com Facelets tive que pesquisar como fazer isso e também deu um certo trabalho e algumas configurações extras.

Comentário 3:
Essa salada de RichFaces, Tomahawk, Facelets, Scripts personalizados e CSS para personalizar superficialmente alguns componentes do RichFaces gera problemas como:
[list]As vezes os componentes não obedecem o CSS personalizado. Ai só um Refresh para resolver o problema.[/list][list]Como são muitos arquivos JavaScript, localmente tudo roda bem, mas na internet, onde o tempo de resposta é maior, temos vários erros provocados por javascripts não carregados.[/list]

Comentário 4:
Pode até ser que eu seja o inexperiente com JSF para ter passado por isso, mas acredito que essas coisas devam ser mais fáceis.

Bom pessoal, eu reportei o problema que passei apenas para ser a inspiração e justificativa para se fazer a pergunta: JSF está maduro ou apenas começando?

Agora gostaria de conheçer o que vocês acham a respeito!!!

Abrs. :lol:

Claudiney

JSF começando nao tá, pq já faz um bom tempo que está no mercado…

Esses problemas ae vejo mts vezes, na web, com java: temos que agregar as nossas aplicação 19.850 frameworks pra fazer o trabalho que o java em si nao faz… e aí começa as incompatibilidades… :lol:

Será que nao vai existir uma linguagem realmente poderosa, que atenda a web, sem essas trocentas ferramentas?

Particularmente eu gosto de usar JSF… acho ele bom sim.

jopss :stuck_out_tongue:

[quote=jopss]JSF começando nao tá, pq já faz um bom tempo que está no mercado…

Esses problemas ae vejo mts vezes, na web, com java: temos que agregar as nossas aplicação 19.850 frameworks pra fazer o trabalho que o java em si nao faz… e aí começa as incompatibilidades… :lol:

Será que nao vai existir uma linguagem realmente poderosa, que atenda a web, sem essas trocentas ferramentas?

Particularmente eu gosto de usar JSF… acho ele bom sim.

jopss :stuck_out_tongue: [/quote]

É por essa e outras que muita gente aqui no GUJ abomina o JSF. Por que ele faz tudo para complicar o simples. A culpa não é do Java, mas de quem usa esses frameworks.

Já tentou olhar algum outro framework em Java 100000 vezes mais simples e prazeroso do que JSF.

Comece por Mentawai e VRaptor.

EDIT: Tb acho a salada de frameworks uma m… Por isso que existe frameworks full-stack por aí…

[quote] Já tentou olhar algum outro framework em Java 100000 vezes mais simples e prazeroso do que JSF.

Comece por Mentawai e VRaptor.[/quote]

Seria bom… se 99.99% das empresas não trabalhassem com JSF e Struts… fazê oq neh…

jopss :stuck_out_tongue:

[quote=saoj][quote=jopss]JSF começando nao tá, pq já faz um bom tempo que está no mercado…

Esses problemas ae vejo mts vezes, na web, com java: temos que agregar as nossas aplicação 19.850 frameworks pra fazer o trabalho que o java em si nao faz… e aí começa as incompatibilidades… :lol:

Será que nao vai existir uma linguagem realmente poderosa, que atenda a web, sem essas trocentas ferramentas?

Particularmente eu gosto de usar JSF… acho ele bom sim.

jopss :stuck_out_tongue: [/quote]

É por essa e outras que muita gente aqui no GUJ abomina o JSF. Por que ele faz tudo para complicar o simples. A culpa não é do Java, mas de quem usa esses frameworks.

Já tentou olhar algum outro framework em Java 100000 vezes mais simples e prazeroso do que JSF.

Comece por Mentawai e VRaptor.

EDIT: Tb acho a salada de frameworks uma m… Por isso que existe frameworks full-stack por aí…[/quote]

Se você for usuário tentando aprender, melhor JSF do que Mentawai e VRaptor, pois se me apontar HOJE em qualquer lugar do Brasil 3 empregos onde estiverem pedindo Mentawai ou VRaptor…
as empresas ditam o que temos que aprender, e hoje JSF é um framework essencial.
Agora se vc for o manda chuva do projeto, ai sim pode escolher usar o Mentawai ou VRaptor…

Concordo com vc, mas isso é ruim e não bom! Se lembra quando todas as empresas usavam EJB para tudo?

A verdade é que alguém precisa levantar o dedo, sugerir algo com embasamento e propor um pouco menos de conservadorismo dos “gerentes” de projetos.

O dia que JSF e Struts1 for melhor solução para alguma coisa aí sim o mundo Java estará perdido…

[quote=saoj][quote]
Se você for usuário tentando aprender, melhor JSF do que Mentawai e VRaptor, pois se me apontar HOJE em qualquer lugar do Brasil 3 empregos onde estiverem pedindo Mentawai ou VRaptor…
as empresas ditam o que temos que aprender, e hoje JSF é um framework essencial.
Agora se vc for o manda chuva do projeto, ai sim pode escolher usar o Mentawai ou VRaptor…
[/quote]

Concordo com vc, mas isso é ruim e não bom! Se lembra quando todas as empresas usavam EJB para tudo?

A verdade é que alguém precisa levantar o dedo, sugerir algo com embasamento e propor um pouco menos de conservadorismo dos “gerentes” de projetos.

O dia que JSF e Struts1 for melhor solução para alguma coisa aí sim o mundo Java estará perdido…[/quote]

também concordo, o problema é que nenhuma empresa Grande levantou este dedo…e parece não estar disposta a levantar…

A Web ainda tá só começando. Ou alguém acha uma coisa boa usar HTML + CSS + JavaScript + <> + <<browsers incompatíveis>> pra fazer sistemas? Qualquer coisa mais complexa pra web é gambiarrento, não importa o framework web ou a linguagem utilizada, todos eles tem problemas e limitações que vão te fazer ir pro fórum mais próximo perguntar se tem alguma coisa melhor…

Se o projeto já tá em JSF não adianta mudar de framework, tenta criar uma padrão pra resolver os problemas encontrados e documente no seu projeto.

[]'s

Rodrigo Auler

[quote=Rodrigo Carvalho Auler]A Web ainda tá só começando. Ou alguém acha uma coisa boa usar HTML + CSS + JavaScript + <> + <<browsers incompatíveis>> pra fazer sistemas? Qualquer coisa mais complexa pra web é gambiarrento, não importa o framework web ou a linguagem utilizada, todos eles tem problemas e limitações que vão te fazer ir pro fórum mais próximo perguntar se tem alguma coisa melhor…
[/quote]

A propósito, eu estava inicialmente pensando sobre o Flex. O Flex vai gerar um SWF que é Flash. O Flash a maioria dos browsers tem suporte a ele. O Flex disponibiliza muitíssimos componentes visuais e uma vez carregado no browser a aplicação fica rápida e muito mais rica visualmente do que um monte de html e javascript.

Muitos podem dizer que o Flash pode ficar lento para carregar, mas se você souber estruturar a aplicação, pode carregar os arquivos quando necessário.

O único problema inicial é que teríamos um trabalho maior para integrar uma aplicação Flex com o Java no backend, mas existe já uma biblioteca aberta que permite isso, apesar de nunca ter testado.

Bom, estou comentado sobre o Flex como uma outra opção para o frontend. O que vcs acham?

abs.

Claudiney

São essas “grandes” empresas que usam waterfall há décadas e nunca entregaram um projeto descente no prazo e tão pouco com qualidade.

Aqui no Brasil o termómetro é esse, se as “grandes” empresas usam, fuja!

Há um certo modismo, uma certa “onda” de surgimento de novas tecnologias para a web e que podem ser adotadas e virar um padrão, ou simplesmente desaparecer no ostracismo. O JSF a meu ver irá se tornar um padrão para desenvolvimento web baseado em componentes customisáveis. Acredito que esta tecnologia será ainda muito mais completa e melhorada em versões futuras.
Um abraço. :wink:

Se teu problema for crossbrowser então nenhum framework te ajudará 100%. JSF facilita muito nossas vidas, possui diversos conjuntos de componentes crossbrowser, mas assim como todo framework ele possui falhas. Muitas super fáceis de contornar quando se tem uma mente mais aberta para aderir outros frameworks ou APIs, outros problemas são realmente chatinhos, mas possuem solução.

Enquanto estivermos desenvolvendo para web (com css, javascript, (x)html etc) ainda bateremos de frente com problemas crossbrowser, logo não adianta chorar muito, é partir para o google ou algum forum e tentar resolver o problema.

JSF está estável sim, mesmo com bugs e falhas ele funciona muito bem! Certos problemas você resolverá mais fácil com outros frameworks, já outros JSF resolve brincando!

Alguém já desenvolveu algum sistema com Flex + Java, para apontar os pontos positivos e negativos? Tipo uma intranet ou algo do tipo?

O Flex poderia ser uma boa alternativa com relação ao JSF?

Eu sou do “the good ol’ JSP”. Eu sinceramente considero JSF um bosque em chamas * (assim como EJB, mas isso é outra história).

Na minha opinião, eu não digo que ele está nascendo e nem que está maduro. Eu digo que ele vai morrer! Terá o mesmo destino do EJB 2. Só que obviamente, essa morte não será tão visível porque um dia vão criar o JSF 2, ou JSF 3 que vai manter apenas o nome do framework inicial.
Ou talvez fique que nem o JAX-RPC.

    • Procure no google por “fábula dos porcos assados”

[quote=victorwss]Eu sou do “the good ol’ JSP”. Eu sinceramente considero JSF um bosque em chamas * (assim como EJB, mas isso é outra história).

Na minha opinião, eu não digo que ele está nascendo e nem que está maduro. Eu digo que ele vai morrer! Terá o mesmo destino do EJB 2. Só que obviamente, essa morte não será tão visível porque um dia vão criar o JSF 2, ou JSF 3 que vai manter apenas o nome do framework inicial.
Ou talvez fique que nem o JAX-RPC.
[/quote]

tenho opiniao parecida, mas nao sei se morre nao. o jsf 2 com anotacoes deve melhorar HORRORES, mas ainda prefiro algo action based em vez de view-component based

grande parte do gostar e nao gostar vem dos conhecimentos que cada pessoa tem

tavez se a pessoa conhecer(digo conhecer mesmo) CSS+JS+HTML+JAVA+JSP ela prefira fazer isso na unha, pra um codigo mais limpo(por que falar que o codigo que ele gera na tela é “limpo” é um tanto complicado), fora o JS nao obstrutuvo, se isto for requesito(para sites eu ate credito que exista isso, mas para sistema, ai acho muito dificil), aposenta a ideia do JSF!

calma que nao sou um ant-cristo do JSF,

eu venho de aplicacoes ASP 3.0( ASP mesmo nao ASP.Net), sempre usei HTML, crio os meus CSS, JS, entre outras coisas na mao.
Porem, resolvi me atualizar(ja tava mais que na época),e opitei por Java.
Comei a estudar e vi que “tudo” é feito automatico, JSF, Hibernate(eu me dou melhor com banco de dados, View, Procedures, trigger e tudo mais, esse dai eu fujo mesmo, acho que ele tira muito na performance e principalmente na parte de seguranca, pois depender do front-end pra evitar sql-injection é preocupante)e outras coisas.

JSF, na verdade o codigo que ele me gera me preocupa, os campos oculcos que cria, e bla bla bla, mas, em outro ponto, ele me ajuda um pouco na velocidade(talvez por que nao tenho “os meus componentes” criados em JSP).
mas o grande problema que vejo nele é, eu “perco” o controle da pagina(pode ser pela minha inesperiencia tambem), e ficar mesclando frameworks tambem gera grandes problemas no sentido de compatibilidade.

Eu estou tentando usar ele, nao tem dado muito certo, tenho apanhado bastanta, ate acredito que seja pela minha inexperiencia, mas como a propaganda sobre “ele ajuda na produtividade” era grande, estou fazendo os testes.

ele parece “ruim” pra quem tem um conhecimento mais longo, porem, para aqueles que tem um conhecimento curto, que estao comecando agora, parece “bom” por se tornar mais “simples” o aprendizado(ate por que uma pessoa aprender CSS+JS+HTML leva tempo)

e nao adianta falar que “se a empresa usa essas coisas “ruins” troque de trampo”, hoje em dia a parte de TI nao esta tao facil de arrumar um emprego, esta sobre-carregado, tudo bem que existe os que nem sabe o que estao fazendo mas, se o cara que nao sabe o que esta fazendo faz algo pela metade do seu preco(se ve muito isso na criacao de sites), e teoricamente funciona, a grande maioria opta pelo metade do preço.

se o JSF esta maduro, na minha humilde opniao, bem, digo que nao, existem coisas “simples” a serem melhoras nele, fora as incompatibilidades, agora, tem que ver as novas versoes, como vao ficar. Agora se nao versao 2.0 nao tiver mudanças significativas, ai vai complicar mesmo.

abs
T+ pessoal

Bom,

Eu já trabalho a muito tempo com sites/sistemas para web, tanto com java como para outras linguagens. Com JSF eu estou trabalhando a 1 ano e pelo que pude ver o JSF foi muito bom para sistemas na web, principalmente para criar telas CRUD com recursos AJAX. Para desenvolver um site achei mais trabalhoso.

Mas na minha opinião a grande questão é que em tempos de RIA, se por um lado tempos uma grande quantidade de componentes JSF que deixam as telas muito melhores, por outro temos uma grande quantidade de incompatibilidades entre Browsers e desses componentes JSF.

Considerando tudo isto, eu penso que outras opções de interfaces RIA (sem ser JSF) podem ser muito boas. Tenho lido um pouco sobre Flex, mas como nunca desenvolvi nenhum sistema com Flex, não sei se seria uma boa alternativa. Mas ao menos na teria, eles problemas seriam amenizados.

Alguém já construiu algum sistema com interfaces RIA (Tirando os frameworks baseados em actions e o JSF) para nos citar o que foi bom e ruim?

Abs.

Claudiney