Skip to content
llins edited this page Oct 3, 2014 · 10 revisions

Table of Contents

Controller

Suporte

Para facilitar o desenvolvimento das controladoras, foi desenvolvida a classe abstrata Controller, que possui uma série de métodos facilitadores.

Para utilizá-la basta que sua controladora estenda a classe Controller:

public class ListarPessoasController extends Controller

Ao estender a classe Controller sua controladora poderá usufruir de métodos facilitadores como:

Método invocado quando uma view é iniciada

/**
 * Acao invocada sempre que a tela for iniciada.
 * Retorne nulo para seguir para a tela ou retorne uma viewId para redirecionar para outra tela
 * @return
 */
@RequestAction
@Deferred
@IgnorePostback
public String requestAction()

Para utilizá-lo sobrescreva em sua controller.

Métodos para serem utilizados nas views

/**
 * Util para saber se a controladora ja foi inicializada. 
 * Voce devera informar a inicializacao manualmente
 * @return
 */
public boolean isInitialized()

/**
 * Comparacao de strings com ignore case, util para dataTables com sort
 * @param obj1
 * @param obj2
 * @return
 */
public int sortIgnoreCase(Object obj1, Object obj2)

/**
 * Filtro de dados ignorando o caso, util para dataTables
 * @param value
 * @param filter
 * @param locale
 * @return
 */
public boolean filterIgnoreCase(Object value, Object filter, Locale locale)

/**
 * Metodo para ser utilizado em acoes de cancelamento que exigem a limpeza de um form.
 * Realiza, assim, a limpeza completa na arvore de componentes do JSF, do form que o botao se encontra.
 * @param event
 */
public void resetForm(ActionEvent event)

Métodos auxiliares para serem utilizados na controller

/**
 * Retorna a referencia do FacesContext.
 * @return FacesContext
 */
protected FacesContext getContext()

/**
 * Retorna a referencia do FacesContext.
 * @return ExternalContext
 */
protected ExternalContext getExternalContext()

/**
 * Retorna a referencia para o HttpServletResponse atual.
 * @return HttpServletResponse
 */
protected HttpServletResponse getResponse()

/**
 * Retorna a referencia para o HttpServletRequest atual.
 * @return HttpServletRequest
 */
protected HttpServletRequest getRequest()

/**
 * Retorna a instancia atual do contexto ServletContext.
 * @return ServletContext
 */
protected ServletContext getServletContext()

/**
 * Retorna um parametro do Request HTTP (HttpServletRequest) sob a chave 'name'.
 * @param name - chave do parametro no Request HTTP
 * @return String - parametro do Request HTTP sob a chave 'name'
 */
protected String getParameter(String name)

/**
 * Retorna a referencia para o HttpSession atual.
 * @return HttpSession
 */
protected HttpSession getSession()

/**
 * Retorna o contexto de Flash
 * @return Flash
 */
protected Flash getFlash()

/**
 * Adiciona uma mensagem no facesMessages com severidade info.
 * @param msg
 * @param params
 */
protected void addMsg(String msg, Object ... params)

/**
 * Adiciona uma mensagem no facesMessages com severidade INFO, para o componente 
 * especificado
 * @param compoenentId
 * @param msg
 * @param params
 */
protected void addMsgToComponent(String componenteId, String msg, Object... params)

/**
 * Adiciona uma mensagem no facesMessages com severidade warn.
 * @param msg
 * @param params
 */
protected void addMsgWarn(String msg, Object... params)

/**
 * Adiciona uma mensagem no facesMessages com severidade WARN, para o componente 
 * especificado.
 * @param compoenentId
 * @param msg
 * @param params
 */
protected void addMsgWarnToComponent(String componenteId, String msg, Object... params)

/**
 * Adiciona uma mensagem no facesMessages com severidade error.
 * @param msg
 * @param params
 */
protected void addMsgErro(String msg, Object... params)

/**
 * Adiciona uma mensagem do bundle no facesMessages com severidade error, para o componente 
 * especificado.
 * @param compoenentId
 * @param msg
 * @param params
 */
protected void addMsgErroToComponent(String componenteId, String msg, Object... params)

/**
 * Lanca erro de validacao com a mensagem do bundle. 
 * @param key
 * @throws ValidatorException
 */
protected void throwValidationException(String key) throws ValidatorException

/**
 * Retorna a mensagem do arquivo properties default ("messages") formatada com os parametros passados.
 * 
 * @param key
 * @param params
 * @return mensagem formatada
 */
protected String getMessageFromDefaultBundle(String key, Object ... params)

/**
 * Retorna a mensagem do arquivo properties, que possui o nome passado como argumento, formatada com os parametros passados.
 * 
 * @param bundleName
 * @param key
 * @param params
 * @return mensagem formatada
 */
protected String getMessageFromBundle(String bundleName, String key, Object ... params)

/**
 * Metodo para limpar o componente, na arvore jsf, cujo id informado. 
 * @param componentClientId
 */
protected void resetComponent(String componentClientId)

Esteriótipos

Na versão atual do CDI e do JSF há o problema de que o escopo de View não é suportado pelo CDI. Para utilizar o escopo de View a sua controladora deverá ser uma ManageBean e não um bean gerenciado pelo CDI. O problema é que perde-se uma série de vantagens providas pelo CDI, como, por exemplo, interceptadores.

A arquitetura Suri-CDI corrige o problema (fonte DeltaSpike)! Logo, é possível criar a sua controladora da seguinte forma:

@Named
@ViewScoped
public class ListarPessoasController extends Controller

Mas para facilitar um pouco a vida, provemos os seguintes esteriótipos:

@ApplicationController

É o mesmo que:

@Named
@ApplicationScoped

Utilização
@ApplicationController
public class ListarPessoasController extends Controller

@SessionController

É o mesmo que:

@Named
@SessionScoped

Utilização
@SessionController
public class ListarPessoasController extends Controller

@ViewController

É o mesmo que:

@Named
@ViewScoped

Utilização
@ViewController
public class ListarPessoasController extends Controller

@RequestController

É o mesmo que:

@Named
@RequestScoped

Utilização
@RequestController
public class ListarPessoasController extends Controller

Interceptors

@BusinessMessages

Este interceptador é responsável por capturar as BusinessException e transformá-las em mensagens de erro do JSF. Ou seja, ao lançar uma BusinessException na camada de Negócio, não é necessário que na controladora tenha o tratamento da exceção, pois será realizado automaticamente por este interceptador.


Utilização

@ViewController
@BusinessMessages
public class ManterPessoaController
A classe suporte Controller já possui essa anotação, logo todas as controladoras que estendam de Controller já terão o interceptor ativado, não sendo necessário adicionar a anotação em sua controladora.

Clone this wiki locally