Tutorial Mentawai #9 – Tags

Olá pessoal!

O Mentawai nos fornece várias tags JSP que funcionam de forma integrada ao framework. Dessa forma, fica mais simples obter os dados dos formulários, ou mesmo montar a sua página de acordo com o resultado de uma action.

Por exemplo, para a montagem de formulários, é possível utilizar, por exemplo, as seguintes tags:

<mtw:form action="Adicionar.mtw" method="post">
    Nome: <mtw:input type="text" name="nome" size="50" maxlength="60" />
    Grupo: <mtw:select name="grupo" list="grupos" emptyField="true" />
    Usuário: <mtw:input type="text" name="usuario" size="20" maxlength="30" />
    Senha: <mtw:input type="password" name="senha" size="20" maxlength="20" />
    Confirme a Senha: <mtw:input type="password" name="confirmacao" size="20" maxlength="20" />
    Zip: <mtw:input type="text" name="zip" size="20" maxlength="20" />
    Aceita os termos?: <mtw:input type="checkbox" name="aceitacao" value="1" />
    <input type="submit" value="Cadastrar" />
</mtw:form>

Como pode ser percebido, as tags se assemelham muito às tags padrão do HTML. A ideia é exatamente essa. Um detalhe interessante, é na tag mtw:select, que possui um atributo list. Nesse caso em questão, para carregar o formulário corretamente, o Mentawai espera na output uma Collection na output, sob o nome de grupos. O Mentawai se encarregará de popular as opções do select. Um artifício interessante é montar essa lista utilizando um Map de Strings e Integer, colocando Strings no formulário e obtendo inteiros na hora de pegar o valor selecionado dentro da action.

Falando em listas, caso você queira listar o conteúdo de uma lista (Collection) na sua página, você pode utilizar as tags de repetição do Mentawai. Vamos supor que temos uma lista chamada carros na input da página.

<mtw:list value="carros">

Carros disponíveis
<mtw:isEmpty>
   Nenhum carro disponível
</mtw:isEmpty>

<mtw:loop var="c">
    Modelo: <mtw:out value="c.modelo" />
    Fabricante: <mtw:out value="c.fabricante" list="fabricantes" />
    Ano: <mtw:out value="c.ano" />
</mtw:loop>

</mtw:list>

Apenas reforçando, para a correta exibição da listagem, há a necessidade de que uma lista chamada fabricantes esteja na input da página.

Finalizando, é possível também criar tags de condição dentro da JSP, facilitando na hora de montar páginas personalizadas de acordo com o conteúdo da saída de uma action.

<mtw:if test="usuario.admimistrador" value="true">
   Você é um administrador! <br/>
</mtw:if>

<mtw:if test="resultado.status" value="2">
    O seu status está pendente. Cheque a sua conta por favor!
</mtw:if>

<mtw:if test="cidade" value="Pouso Alegre">
    Opa! Você é de Pouso Alegre?
</mtw:if>

Bom pessoal, é isso! Até a próxima!

Tutorial Mentawai #6 – Validação

Olá pessoal! No post de hoje, veremos como funciona a validação no Mentawai.

O framework nos fornece uma ótima maneira de validar formulários. Nesta validação basta adicionar as regras do próprio Mentawai ou definir as suas próprias. O primeiro passo para a utilização é configurar o ValidationFilter no ApplicationManager. Muito simples:

@Override
public void loadFilters() {
     filter(new ValidationFilter());
}

Agora, na sua Action você deve fazê-la implementar a interface Validatable e criar a sua implementação do método prepareValidator(). É nesse método que definimos as restrições que deverão ser validadas. Segue um exemplo.

public class HelloAction extends BaseAction implements Validatable {

	@Override
	public void prepareValidator(Validator val, String method) {
		val.requiredFields("Campo obrigatório!", "nome", "cpf", "email");

		val.add("cpf", MethodRule.getInstance(this, "validaCpf"), "CPF Inválido!");
		val.add("email", EmailRule.getInstance(), "E-mail Inválido!");
	}

	boolean validaCpf(String cpf) {
		... implementação ...

		return true;
	}

	@Override
	public String execute() throws Exception {
		... implementação ...

		return SUCCESS;
	}
}

Neste exemplo utilizamos alguns exemplos de “rules” ou regras que o Mentawai oferece. Na documentação lá no site oficialvocê encontra os outros filtros que ele  oferece, ou mesmo como implementar sua própria regra de validação (ele possui, por exemplo, CPF, tempo, hora, CNPJ). Lá na JSP, basta adicionar as tags onde o erro deve ser exibido:

...
CPF: <mtw:input type="text" name="cpf" />
<mtw:outError field="cpf">
    <font color="red"><mtw:out /></font>
</mtw:outError>
...

E é isso. Só não se esqueça de configurar no ApplicationManager a consequência ERROR, que é retornada caso o formulário não passe pelas regras de validação.

action("/Hello", HelloAction.class).
    on(SUCCESS, fwd("/jsp/hello.jsp")).
    on(ERROR, fwd("/jsp/index.jsp"));

No exemplo no site oficial, é possível obter maiores detalhes sobre o processo. Não há muito o que ser dito, já que o exemplo é bastante completo! (:

Tutorial Mentawai #3 – Autenticação

Olá pessoal! Tudo certo?

No último post sobre o Mentawai, tivemos uma visão geral sobre Filtros, que basicamente são ações executadas sobre o conteúdo da input ou output, antes ou depois da execução de uma Action. A partir do uso de filtros giram praticamente todas as funcionalidades do framework.

No tutorial de hoje, vamos ver como funciona o controle de autenticação no Mentawai. A autenticação consiste em evitar o acesso de usuários não autenticados (que não realizaram um login, por exemplo). Vocês verão que este processo de controle é extremamente simples de se fazer com o Mentawai.

Primeiramente, precisamos criar uma action de login. Em vez de estender BaseAction, esta action deve estender BaseLoginAction.

O lance dessa action é o método setUserSession() que deve ser chamado para iniciar a sessão de um usuário. Usuários sem uma sessão criada serão bloqueados pelo AuthenticationFilter que veremos logo a seguir.

Agora, precisamos adicionar um filtro no ApplicationManager que definirá opções de redirecionamento e alguns detalhes a mais:

Perceba que adicionamos um filtro global, o AuthenticationFilter. É ele o responsável por tratar o bloqueio das páginas por usuários não autenticados. Além disso definimos uma consequência global, indicando para onde o usuário será redirecionado caso tente acessar alguma página protegida sem estar autenticado (no caso, redirecionamos para a página de login).

Além disso, configuramos a action de Login, definindo um redirecionamento para a home (login com sucesso) ou pra páginda de login (login sem sucesso). E qual a diferença entre o Redirect e o Forward? Enquanto o Redirect simplesmente redireciona para outra página ou action, o Forward redireciona mantendo os dados na saída, realizando um processamento prévio da página. Ele é útil, por exemplo, para exibirmos mensagens de aviso ao usuário (coisa que veremos em muito breve!).

Continuando nosso tutorial, assim como implementamos o login, precisamos implementar o Logout. Como o logout realiza praticamente a mesma tarefa em todas as aplicações, o Mentawai já fornece uma implementação pronta que pode ser utilizada. Caso você tenha dados específicos que necessitem tratamento, você pode criar a sua implementação, tomando como base o exemplo da documentação oficial. Então, basta configurarmos no ApplicationManager.

Ok… já vimos como funciona toda essa parte de configuração… mas como eu projeto a minha página? Através de uma única tag!

Na configuração atual que temos, caso o usuário tente acessar uma página protegida, ele será redirecionado para a página de login e, caso o login seja realizado com sucesso, ele é redirecionado para a home. Em alguns casos, seria interessante que, após o login, ele fosse redirecionado de volta para a página que estava tentando acessar. Para isso, podemos adicionar um filtro na configuração da action de login para fazer esse trabalho pra gente.

E depois, basta adicionar  a opção redir=”true” na tag mtw:requiresAuthentication.

Então… é isso pessoal! No próximo tutorial, veremos como implementar um sistema de autorização com o Mentawai. Até lá! 😀