Arquivo

Textos com Etiquetas ‘JSF’

JSF utilizando o SelectOneMenu de maneira fácil

5, janeiro, 2010 2 comentários

Um das principais fontes de dúvida para quem está começando a aprender JSF é o componente SelectOneMenu. Basta uma simples garimpada no google e você confirmará isso. Diversas soluções para o uso do SelectOneMenu são indicadas, uma das que mais vejo é utilizar um converter para converter o objeto selecionada na SelectOneMenu no objeto desejado. Porém eu prefiro uma maneira que acho mais simples, que irei mostrar a seguir.
No nosso exemplo, terei um objeto do tipo “Classe” que representará uma classe de alunos, cada classe contem um objeto do tipo “Professor”. Ao cadastrar uma classe o usuário deverá selecionar o professor em uma determinada lista. Então vamos lá:

Teremos um backing bean chamado ClasseBean que conterá uma objeto do tipo classe.

public class ClasseBean {

    private Classe classe;
    private ClasseDao classeDao;
    private List<SelectItem> listaItem;
    private int professorSelecionado;

public ClasseBean() {
        classe = new Classe();
        classeDao = new ClasseDao();
        listaItem = getLista();
    }

 public List<SelectItem> getLista() {
        ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
	ProfessorDao professorDao = new ProfessorDao();
        List<Professor> resultado = (List<Professor>) professorDao.listAll();

        for (Professor teste : resultado) {
            SelectItem item = new SelectItem(teste.getId(), teste.getNome());
            lista.add(item);
        }
        return lista;
    }

 public String salvar() {

	 ProfessorDao professorDao = new ProfessorDao();
         professor = professorDao.procurar(professorSelecionado);
         this.classe.setProfessor(professor);
         classeDao.salvar(classe);

        classe = new Classe();
        return "listarClasses";
    }

	//métodos getters e setters omitidos

}

No exemplos não irei me apegar a camada de persistência, devendo essa ter sido criada previamente pelo programador e conter os métodos de busca pelo ID e buscar todos os registros.

Iremos começar pelo método getLista(), nesse método é criado uma lista de SelectItem que será usada como exibição, os objetos SelectItem recebem como parametro no construtor dois atributos, o primeiro é a chave do selectItem (que será igual ao id do professor) e o valor de exibição (que no nosso caso será o nome do professor).

Já o método salvar() utilizar o ProfessorDao para efetuar uma busca através do atributo professorSelecionado (o valor desse atributo será igual a chave do item escolhido no SelectOneMenu, que no nosso caso será o id do professor. Lembra-se do: “SelectItem item = new SelectItem(teste.getId(), teste.getNome());” ) após isso o atributo professor do objeto Classe é setado e o o objeto é persistido.

Agora iremos para a criação da página jsf:

<h:selectOneMenu value="#{classeBean.professorSelecionado}">
classeBean.listaItem}">
                            <f:selectItems value="#{classeBean.listaItem}"/>
</h:selectOneMenu>

O atributo value do SelectOneMenu recebe como parametro o atributo que receberá o valor da chave do atributo selecionado da lista.
E utilizamos o selectItems para informar em qual atributo está a lista de SelectItem’s a ser exibida.

Categories: Java Tags: ,

Criando uma classe mensageira em JSF

11, junho, 2009 11 comentários

Carteiro

Uma coisa que sempre gosto de fazer quando estou programando usando JSF, é criar uma classe mensageira para facilitar o trabalho com mensagens (de erro, informação e etc..).

Essa classe, me livra do trabalho de:

  • Obter repetidamente o FacesContext.
  • Criar repetidamente o objeto FacesMessage.
  • Escrever repetidamente as mensagens.

Pode parecer pouco, mas imagina você ter que repetir isso todas as vezes que precisar adicionar uma mensagem para o usuário.

Segue abaixo a implementação:


package lucasallan.com.blog.exemplo

import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;

import javax.faces.context.FacesContext;

/**

*

* @author Lucas Allan Cardoso

*/

public class Mensageiro {

private static ResourceBundle bundle = ResourceBundle.getBundle(“messages”, FacesContext.

getCurrentInstance().getViewRoot().getLocale());

public static void errorMsg(String msg){

msg = bundle.getString(msg);

FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR,msg, msg);

FacesContext fc = FacesContext.getCurrentInstance();

fc.addMessage(“erro”, fm);

}

public static void infoMsg(String msg){

msg = bundle.getString(msg);

FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);

FacesContext fc = FacesContext.getCurrentInstance();

fc.addMessage(“info”, fm);

}

}

Agora criaremos um arquivo chamado “messages.properties” dentro da raiz da aplicação, onde poderemos definir as mensagens da nossa aplicação, bem como chaves para poder utiliza-las. O conteúdo desse arquivo consiste em:

chave = valor

Exemplo:

bdError = Erro ao acessar banco de dados!

Quando precisarmos utilizar nosso mensageiro, basta usar:

Mensageiro.errorMsg(“bdError”);

E nossa classe irá procurar dentro do messages.properties um valor que tenha como chave “bdError“, no nosso exemplo ele adicionaria a mensagem “Erro ao acessar banco de dados!” ao nosso contexto.

Bem simples né?

Bom, agora iremos entender a nossa classe mensageira:

  1. Primeiro nós temos o objeto estático ResourceBundle que utilizaremos para efetuar as buscas das mensagens através dos valores passado no arquivo messages.properties. Repare que eu passo o nome do arquivo sem a extensão .properties e a localização dele, no nosso caso utilizamos o método getViewRoot do FacesContext para obter a localização. O interessante é que todas essas mensagens possuem suporte a internacionalização, você pode definir dentro do messages.properties mensagens personalizadas para cada locale, por isso utilizamos o método getLocale.
  2. Os métodos: infoMsg e errorMsg são os responsáveis pelas mensagens, recebem como parâmetro uma string, que será utilizada como chave para encontrar o valor da mensagem.
  3. Na linha seguinte ele faz com que a variável ‘msg‘ que antes possuía a chave receba como valor a própria mensagem que é buscada através do método getString do objeto ResourceBundle.
  4. Nas próximas linhas não tem muito o que explicar, crio o objeto FacesMessage com a mensagem conseguida anteriormente, obtenho a instancia do FacesContext e adiciona a mensagem.
  5. E fim, você está pronta p usar o seu mensageiro.

Espero que possa ajudar vocês a tornar o desenvolvimento do seus sistemas menos repetitivo e mais divertido.

Quem quiser saber mais sobre jsf

Categories: Dicas, Java Tags: ,

Produtividade com Java: JBoss Seam!

13, janeiro, 2009 2 comentários

Desenvolvimento Web para mim com Java sempre foi com JSF, felizmente ou talvez infelizmente eu não peguei os anos de ouro de outros grandes framework’s, que ainda hoje estão em constante evolução e uso.

Uma coisa que eu afimo com toda certeza, é que felizmente eu não peguei o tempo que se usava somente JSP e servlet e que JSTL era um sonho. Digo isso, porque no meu trabalho atual dou manuntenção em códigos escritos somente com JSP e Servlet (apesar que ainda hoje, em pleno 2009 a galera aqui não aceita trabalhar com nenhum framework. É JSP, Servlet e JDBC. Quem não aguentar chama mamãe. OBS: Eu já estou quase chamando. =P )

Na época que esses projetos que dou manuntenção foram escritos, uma coisa é certa: ou não se usava padrões de projetos ou isso nem passava perto da cabeça de quem os programou. É rotina abrir códigos jsp com 1000 linhas, com chamadas ao banco de dados dentro dela, isso e várias outras coisas toscas.

Bom, mas o objetivo desse post não é falar das coisas ridiculas que tenho que conviver todo dia e sim falar de uma tecnologia que no momento que conheci me apaixonei.

O Jboss Seam é um framework que combina outros dois frameworks, EJB3 e JSF. Ele não substitui tais frameworks e sim faz com que eles trabalhem juntos. Todos que trabalham com essas tecnologias sabem de todos os problemas que temos. Por exemplo: você não consegue utilizar uma injeção de dependencia do EJB em um managed bean do jsf, entre vários outros.

Já com Jboss Seam, nós eliminamos o uso intensivo de configuração em xml, como por exemplo o faces-config.xml do JSF não é mais necessario, pois as configurações dos beans que antes eram feitas nele agora são feitas via anotações do Seam. Podendo também utilizar injenção via anotação do EJB3 dentro dele.

Sem contar diversos outros recursos que o Seam oferece, tais como: autenticação, autorização, geração de pdf entre diversos outros. Com o uso do Jboss Seam o desenvolvimento das aplicações é feita de uma maneira rápida, fácil e sem o stresse causado pelos problemas citados a anteriormente.

Vale citar também que em breve vai sair o WebBeans, que é justamente a tentativa de padronizar a forma de desenvolvimento sugerida pelo Jboss Seam. Integrando JPA, JSF, EJB3 entre outras coisas.

Para quem quiser saber mais:

http://www.seamframework.org

Trabalhando com Richfaces

22, novembro, 2008 1 comentário

RichFaces é uma biblioteca de componentes para aplicações web desenvolvidas usando o framework JSF. Para usar esses componentes na sua aplicação é muito simples. Então vamos lá:

Primeiro baixe as bibliotecas em http://www.jboss.org/jbossrichfaces/ e copie os *.jar para o diretorio lib do seu projeto. Em seguida abra o web.xml e adicione as configurações citadas mais abaixo.

Aqui você configura o skin que será usado pelos componentes, nesse caso eu usei o blueSky. Outras possiveis opções são: Laguna, Glass-X, Dark-X, Ruby, Wine, DeepMarine e etc…

<context-param>

<param-name>org.ajax4jsf.SKIN</param-name>

<param-value>blueSky</param-value>

</context-param>

E por fim configure o filtro:

<filter>

<display-name>Ajax4jsf Filter</display-name>

<filter-name>ajax4jsf</filter-name>

<filter-class>org.ajax4jsf.Filter</filter-class>

</filter>

<filter-mapping>

<filter-name>ajax4jsf</filter-name>

<servlet-name>Faces Servlet</servlet-name>

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

<dispatcher>INCLUDE</dispatcher>

</filter-mapping>

Agora para usar os componentes em suas paginas JSF, basta adicionar no topo da pagina as taglib

<%@taglib prefix=”a4j” uri=”http://richfaces.org/a4j” %>
<%@taglib prefix=”rich” uri=”http://richfaces.org/rich” %>

A parti daí é só começar a usar.

Para mais informações, a documentação oficial é uma excelente opção:

http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/index.html

Categories: Java Tags: , , , ,