Dúvidas sobre JSF (JavaScer Faces)

12 respostas
danieldestro

Caros,
Estou me aventurando em aprender JSF (JavaScerver Faces) e tenho umas dúvidas pertinentes, que acho que o pessoal mais experiênte na tecnologia pode me responder.

  1. Percebi que o mapeamento feito no faces-config.xml refere-se apenas ao mapeamento pelo nome físico do JSP, e não existe um mapeamento lógico, como ocorre no Struts, por exemplo.

Imagine que minha app web tenha uma estrutura de diretórios, onde todos os meus JSPs fiquem dentro da pasta “jsp”. Então eu teria que mapeá-los assim:

<faces-config> <navigation-rule> <from-view-id>/jsp/pagina.jsp</from-view-id> ...

E referênciar num link como “jsp/pagina.faces”. (Servlet do JSF mapeado para “*.faces”).

Sendo que no Struts posso mapear logicamente apenas como “pagina.do”, mesmo que meu JSP esteja dentro de uma estrutura de diretórios.

Correto?

  1. Existe mapeamento lógico?

  2. O Struts usa uma abordagem de Action para executar o request, mas no JSF o paradigma é um pouco diferente, ou seja, ele trata eventos e você mapeia os backing beans que vão responder a cada evento disparado na UI. Correto?

Existe ou vocês usam alguma facilidade para trabalhar com esses backing beans? Ou apenas ter esses POJOs é o suficiente para tornar o trabalho produtivo e pouco repetitivo?

Por enquanto é só. Só tenho algumas dúvidas quanto ao JSF, pois pela minha experiência em sistemas e pelo que vi que JSF oferece, em muitos casos podemos chamá-lo de FECES em vez de FACES.

Obrigado!

12 Respostas

keller

Não sou nenhum expert em JSF mas vou responder o que eu sei…
Se eu estiver errado em algo me corrijam…

Acho que sim no JSF “jsp/pagina.faces” é traduzido pra “jsp/pagina.jsp” , se no Struts ocorre de maneira semelhante “jsp/pagina.do” é traduzido pra “jsp/pagina.jsp” entao certo.

Acho que já é um mapeamento logico apenas mapear “jsp/pagina.jsp” não? Se estou errado entao diga o que quer fazer mais precisamente…

Sim no caso #{MeuBean.save} ira executar o metodo save na classe MeuBean com os campos populados pelo JSF. Existem tambem os ActionListener’s vale uma olhada…

Trabalhar com POJOs é facil a unica coisa repetitiva é apertar ALT+SHIFT+S e depois R pra gerar os get/set.

Heheheh belo trocadilho mas jsf é bom , nao será sua “silverbullet” mas é bom e simples de se trabalhar , voce consegue criar componentes com uma certa facilidade tambem…

Ah e antes de você sair customizando a dataTable da uma olhada na displaytag. :wink:

danieldestro

Quando eu disse mapeamento lógico. Imagine isso:

Tenho um JSP fisicamente em: “APP_WEB/jsp/pagina.jsp”

No Struts eu mapeio como “xyz.do”.

Pelo que vi, no JSF, sou OBRIGADO a chamar “jsp/pagina.faces”, ou seja, o nome refere-se ao nome físico do arquivo (por mais que ele substitua “.faces” por “.jsp”).

No Struts o mapeamento é lógico, ou seja, posso mudar o nome ou até adicionar ou suprimir diretórios, criando nomes lógicos.

E no Struts posso usar um único JSP para vários “actions” (mapeamentos)… Não vejo uma forma de fazer isto no JSF.

danieldestro

Outra coisa…

Hoje, se precisamos fazer no sistema algo tipo um JSpinner do Swing, ou seja, uma caixa com botão pra incrementar/decrementar o valor, fazemos com JavaScript.

No JSF, para isso teria de ser criado um novo componente? Pelo que vi, acho que fica mais difícil de interagir JavaScript com o componente na tela.

Mauricio_Linhares

Se você fizer direto com JavaScript, vai der dificuldades de integrar isso no JSF, porque ele não mantém estado da mesma forma que uma aplicação web comum mantém. O melhor é fazer o componente mesmo.

Mauricio_Linhares

danieldestro:
No Struts o mapeamento é lógico, ou seja, posso mudar o nome ou até adicionar ou suprimir diretórios, criando nomes lógicos.

E no Struts posso usar um único JSP para vários “actions” (mapeamentos)… Não vejo uma forma de fazer isto no JSF.

Esqueça o Struts, você não está mais desenvolvendo “actions”, tente se imaginar desenvolvendo uma aplicação desktop. Você não vai usar JSF corretamente tentando fazer as coisas do jeito que fazia no Struts.

danieldestro

Como eu mesmo mencionei, o paradigma é diferente e eu saquei isso. Menciono o Struts como forma de esclarecer o que estou dizendo.

Eu fiz N programas desktop onde eu reaproveito telas básicas… Seja via herança ou via composição. Como isso não rola com JSF, quero saber como posso mapear isso.

E não ter uma mapeamento lógico para JSF me parece algo rudimentar demais.

Mauricio_Linhares

Se você quer reaproveitar pedaços de tela, você precisa de uma engine de templates, pode fazer isso com Facelets (que oferece até herança de templates) :stuck_out_tongue:

danieldestro

Bom, então pelo jeito eu terei que usar a estrutura física de diretórios na chamada do meu JSF, já que não “existe” um mapeamento lógico. Isso é ruim.

Porém eu poderia alterar o “Request Handler”, se não estou errado, para fazer algumas maracutaias por mim, certo? Um amigo disse que o estendeu para usar convenção em vez de configuração XML.

Mauricio_Linhares

Claro que pode, os pontos de extensão são vários (o Facelets mesmo usa vários desses), mas, será que vale a pena o trabalho?

keller

danieldestro:
Bom, então pelo jeito eu terei que usar a estrutura física de diretórios na chamada do meu JSF, já que não “existe” um mapeamento lógico. Isso é ruim.

Eu procurei aqui no JSF In Action e no Core Java Server Faces nao vi nada…
Infelizmente o JSF vai ficar devendo nisso… :stuck_out_tongue:

Boa sorte! :thumbup:

rafaelolian

Olá,

Também estou começando com JSF e compartilho a indignação do amigo Danieldestro pela falta de mapeamento lógico em JSF pelo seguinte:

1 - Exibir toda minha estrutura de pastas para o usuário no browser

2 - Com mapeamento lógico é possível esconder minhas JSPs dentro de WEB-INF

3 - Se eu possuir um sistema com muitas JSPs e criar uma estrutura de pastas complexa, terei de usar “…/…/…/minhaPasta/meuArquivoReferencia” para includs e referencias a imagens

Eu imagino que deve ter uma solução mais eleganete para isso, vou continuar estudando e escrevo se achar alguma coisa.

F

Olá Rafael e Daniel,

Vocês conseguiram achar ou desenvolver alguma solução para esta questão do mapeamento lógico?

Também tenho este mesmo problema.

Uma alternativa seria colocar todos os jsp’s no root do contexto ou em uma mesma pasta e fazer a referencia relativa, mas fica ruim em termos de organização de grupos de funcionalidades.

abs,

Criado 29 de março de 2007
Ultima resposta 14 de ago. de 2009
Respostas 12
Participantes 5