Jboss Seam - Getting started: Page Actions!

Java, Java Server Faces, Jboss Seam Add comments

Um dos grandes problemas que os desenvolvedores JSF tem é lidar basicamente com 2 situações relacionadas com GET: Passar parâmetros e executar ações via GET. Vou dar dois exemplos clássicos:
1° - Você tem um sistema de cadastro de notícias. Dentro deste sistema você tem uma página que faz a listagem das notícias cadastradas. Para listar estas notícias cadastradas assim que carregasse a página você tinha duas saídas: uma seria fazer o controle no método get de seu datatable:
- No Managed Bean


private List<News> newsList;
...
public List<News> getNewList() {
if (newsList == null) {
newsList = myService.listNews();
}
return newsList;
}

Na página seria algo:


<h:dataTable value="#{newBean.newsList}">
<!-- colunas da tabela -->
</h:dataTable>

A outra forma você teria que criar a ação de listagem e para acessar a página você teria que chamar a página de um componente jsf: um menu ou um botão que fizesse uma requisição post invocando a ação.

Usando o recurso de Page Actions do Jboss Seam você não precisa mais usar estas “soluções alternativas” para executar ações e passar parâmetros para um Managed Bean via GET. Dentro de seu projeto o Seam irá reconhecer todos arquivos xml que sigam o padrão: *.page.xml ou o arquivo pages.xml dentro da pasta WEB-INF. Veja um exemplo do arquivo:


<?xml version="1.0" encoding="UTF-8"?>
<pages xmlns="http://jboss.com/products/seam/pages"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.com/products/seam/pages
http://jboss.com/products/seam/pages-2.0.xsd">
<page view-id="/news/list.xhtml"
action="#{newsBean.listNews}"
conversation-required="false"/>

<page view-id="/news/EditNews.xhtml">
<param name="newsId" value="#{newsBean.news.newsId}"/>
<action execute="#{newsBean.loadNewsById(newsBean.news.newsId)}"
if="#{newsBean.news.newsId != null}"/>
</page>
</pages>

O código acima chama a ação JSF listNews antes de renderizar a página /news/list.jsf, que pode ser chamada via GET ou POST. O mesmo acontece para a edição de notícias /news/EditNews.jsf?newsId=9. Primeiro será vinculado o valor do parâmetro newsId com propriedade newsBean.news.newsId e após será chamada a ação loadNewsById que carrega a notícia recebendo como parâmetro o identificador da notícia.

Sem dúvida nenhuma o recurso de Page Actions é bem legal para se trabalhar com JSF. Vale a pena usar! Em breve mostrarei mais dicas de Page Actions!

4 comentarios: “Jboss Seam - Getting started: Page Actions!”

  1. Matt:

    Olá,
    Tenho uma duvida em relação a page.xml… Como ficaria se usasse um commandLink com um outcome no action=”alterar”
    e através do *.page.xml enviar um objeto anotado com @DataModelSelection, para uma pagina “alterar.xhtml” ??
    Esse exemplo seria para que, ao clicar em uma linha no datatable, redirecionasse para um pagina alterar.xhtml com o objeto daquela linha selecionada.

    Grato

  2. marcossousa:

    Olá Matt,

    bom há duas formas de você fazer esta edição:
    Primeira usando @DataModel e @DataModelSelection, e commandlink/commandbutton que injeta o objeto corespondente a linha selecionanda antes de executar a ação.

    A segunda é usando um s:link/h:outputlink e s:button passando o identificador como parâmetro e recuperando o parâmetro via page action.

  3. Daniel:

    Como eu faço para configurar um projeto SEAM para funcionar apenas com chamadas POST ao invés de GET?

    Desde já agradeço,
    Daniel

  4. Marcos Sousa:

    Olá Daneiel,

    É bem simples, basta você não usar os recursos de page actions, que o JSF já é só POST por padrão. Se desejar só controle navegação e o escopo de conversação.

Deixe seu comentario

WP Theme & Icons by N.Design Studio
Assine Assine os comentarios