Tutorial Mentawai #2 – Filtros

Padrão

Bom, depois de um tempo brincando com Android (o que acabou consumindo quase todo o tempo que eu dedicava ao blog), voltamos com o esquecido tutorial sobre o framework Mentawai.

No primeiro tutorial, vimos como configurar o arquivo de deploy, e realizamos uma operação básica com uma action. No tutorial de hoje, vamos brincar um pouquinho com a funcionalidade de Filtros. Em um framework web, praticamente todas as funcionalidades giram em torno do uso de filtros.

Para este exemplo sobre o uso de filtros, vamos fazer um exemplo simples sobre o uso de um filtro chamado VOFilter. Este filtro serve para transformarmos um conjunto de campos em um objeto, mapeado de acordo com uma classe definida no ApplicationManager. Isso é útil para evitarmos ter que capturar valor por valor de um formulário e setar tudo em um objeto manualmente.

Para início de conversa, vou supor que você já tem um projeto configurado, de acordo com o projeto do primeiro tutorial. Caso tenha dúvidas no processo, não relute em consultá-lo 🙂

Primeiramente, vamos criar uma classe de Pojo para representar uma entidade de nosso aplicativo.

package net.rafaeltoledo.mentawai.pojo;

public class Funcionario {

	private String nome;
	private String cpf;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
}

Prosseguindo, vamos criar uma Action que obterá um objeto diretamente do input da Action, conferindo se os campos foram carregados corretamente.

package net.rafaeltoledo.mentawai.filters.action;

import net.rafaeltoledo.mentawai.filters.pojo.Funcionario;

import org.mentawai.core.BaseAction;

public class ExemploVOFilterAction extends BaseAction {

	@Override
	public String execute() throws Exception {
		Funcionario funcionario = (Funcionario) input.getValue("funcionario");

		if (funcionario == null) {
			return ERROR;
		}

		if (funcionario.getNome() == null) {
			return ERROR;
		}

		if (funcionario.getCpf() == null) {
			return ERROR;
		}

		funcionario.setNome(funcionario.getNome().toUpperCase());

		output.setValue("funcionario", funcionario);

		return SUCCESS;
	}
}

Como pode ser visto, ao contrário do primeiro tutorial, neste fazemos um cast do conteúdo do input chamado funcionario como um objeto completo. Conferimos os campos se estão presentes e, ao final, recolocamos o objeto na saída com o nome todo em letras maiúsculas.

Agora, vamos realizar a configuração desta Action no ApplicationManager. É lá que reside toda a magia da coisa 😀

package net.rafaeltoledo.mentawai.filters;

import net.rafaeltoledo.mentawai.filters.action.ExemploVOFilterAction;
import net.rafaeltoledo.mentawai.filters.pojo.Funcionario;

import org.mentawai.core.ActionConfig;
import org.mentawai.core.Forward;
import org.mentawai.filter.VOFilter;

public class ApplicationManager extends org.mentawai.core.ApplicationManager {

	@Override
	public void loadActions() {
		ActionConfig ac = new ActionConfig("/ExemploVOFilter", ExemploVOFilterAction.class);
		ac.addConsequence(ExemploVOFilterAction.SUCCESS, new Forward("/exibir.jsp"));
		ac.addConsequence(ExemploVOFilterAction.ERROR, new Forward("/index.jsp"));
		addActionConfig(ac);

		// É aqui que toda magia acontece!
		ac.addFilter(new VOFilter(Funcionario.class, "funcionario"));
	}
}

A configuração ocorre da maneira convencional, porém com a adição do VOFilter, onde passamos a classe que representa a entidade (Funcionario.class) e o nome com que queremos que ele seja colocado no input da Action (funcionario).

Bom, para completar, basta codificarmos as JSPs.

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Entrada de Dados</title>
</head>
<body>
	<form action="ExemploVOFilter.mtw" method="post">
	Nome: <input name="nome" size="25"/><br/>
	CPF: <input name="cpf" size="25"/><br/>
	<input type="submit" value="Enviar"/>
	</form>
</body>
</html>

exibir.jsp

<%@ taglib uri="http://www.mentaframework.org/tags-mtw/" prefix="mtw" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Saída</title>
</head>
<body>
	<h3>Saída do Value Object Filter</h3>
	<mtw:bean value="funcionario">
		<h4>Nome: <mtw:out value="nome"/></h4>
		<h4>CPF: <mtw:out value="cpf"/></h4>
	</mtw:bean>
</body>
</html>

Ah, antes de executar, se certifique que, no arquivo web.xml, esteja configurado para apontar para o arquivo index.jsp.

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

Se executarmos o aplicativo, veremos o poder do Mentawai!

Bom, por hoje é isso! Até a próxima! 😀

  • dragao

    post muito util