FilterDispatch

Venho divulgar este framework

FilterDispatch
Framework que encaminha requisições relativas até recursos absolutos. Encapsula paginas dentro de WEB-INF. Cria parâmetros de requisição sem usar textos de consulta. Define uma estrutura padrão para (Javascript, CSS, imagens,…). Adiciona os parâmetros de requisição (webInf, resources, homePage, defaultPage);

FilterDispatch com JSF
Além das funcionalidades FilterDispatch, a versão JSF auxilia requisoções post para manter o ciclo de vida JSF. Auxilia uso de templates. Auxilia a integração de frameworks como o RichFaces. Adiciona o parâmetro de requisição (templates);

FilterDispatch com JSP
Além das funcionalidades FilterDispatch, a versão JSP utiliza HTTP Methods para realizar os encaminhamentos (com ou sem AJAX).

1º link: download
2º link: download

vantagens?

Bom dia, fera. Boa pergunta.

Vantagens semelhantes as dos encaminhamentos do VRpator. Porém adaptável ao JSF

Se não me engano, tudo que estiver dentro de WEB-INF fica “protegido” pelo servidor. Alem de organizar os diretorios da sua aplicação

Digamos que uma loja exibe produtos usando query string: www.sistema.com/produto?id=9. Com FilterDispath bastaria usar www.sistema.com/produto/9

Organiza os diretorios para esses recursos

Esses paramentros podem ajudar na manutenção das paginas da sua aplicação.

[quote]FilterDispatch com JSF
a versão JSF auxilia requisoções post para manter o ciclo de vida JSF. Auxilia uso de templates. Auxilia a integração de frameworks como o RichFaces. Adiciona o parâmetro de requisição (templates)

FilterDispatch com JSP
Além das funcionalidades FilterDispatch, a versão JSP utiliza HTTP Methods para realizar os encaminhamentos (com ou sem AJAX)[/quote]
Junto com este download vem um tutorial em pdf, bem simples e direto. Exemplicando tudo.

O que eu vi de melhor aí, no caso que estou usando JSF acho que os links e a proteção dos arquivos.
Mas no caso, as regras de navegação do jsf continuarao na mesma?

[quote=d34d_d3v1l]O que eu vi de melhor aí, no caso que estou usando JSF acho que os links e a proteção dos arquivos.
Mas no caso, as regras de navegação do jsf continuarao na mesma?

[/quote]Concordo com ele que a única vantagem que eu vi foi a questão do link. Proteção de arquivo não vejo vantagem alguma nisso. Basta configurar filter/JAAS/Spring Security corretamente e tudo funciona numa boa.

[quote]Organiza os diretorios para esses recursos [/quote]Isso o JSF já faz nativo.

[quote]Adiciona os parâmetros de requisição (webInf, resources, homePage, defaultPage)[/quote]Isso aqui é o que eu queria entender melhor o que é? E como funciona.

[quote]Digamos que uma loja exibe produtos usando query string: www.sistema.com/produto?id=9. Com FilterDispath bastaria usar www.sistema.com/produto/9 [/quote] Uma dúvida é, se o usuário digitar www.sistema.com/produto/9 diretamente no browser, ele consegue trabalhar essa informação?

Mas se for usar o FilterDispatch só por causa da questão do link bonito eu uso o PrettyFaces.

[quote=d34d_d3v1l]Mas se for usar o FilterDispatch só por causa da questão do link bonito eu uso o PrettyFaces.
[/quote]Ei, briga comigo não. Não foi eu quem criei o projeto não! :lol: :lol: :lol:

desculpa! não ‘escrevi’ em um ‘tom’ de briga… kkkkk

É só um comentário saudável.

[quote=d34d_d3v1l]desculpa! não ‘escrevi’ em um ‘tom’ de briga… kkkkk

É só um comentário saudável.[/quote]Tava zuando.

Mas eu concordo com você quanto ao pretty faces.

Por isso que eu perguntei o que fazia as outras opções. Vai que tem algum diferencial ali né? ^^

[quote]O que eu vi de melhor aí, no caso que estou usando JSF acho que os links e a proteção dos arquivos.
Mas no caso, as regras de navegação do jsf continuarao na mesma?[/quote]
Sim continua a mesma

[quote][quote]O que eu vi de melhor aí, no caso que estou usando JSF acho que os links e a proteção dos arquivos.
Mas no caso, as regras de navegação do jsf continuarao na mesma?[/quote]
Concordo com ele que a única vantagem que eu vi foi a questão do link. Proteção de arquivo não vejo vantagem alguma nisso. Basta configurar filter/JAAS/Spring Security corretamente e tudo funciona numa boa. [/quote]
Serio? isso é novo p\ mim. Vou pesquisar.

quando usa-se numa pagina, algumas vezes temos problema com o caminho correto do atributo “src”. No lugar de usar
Vc usaria

Isso aqui é o que eu queria entender melhor o que é? E como funciona.[/quote]
webInf: quando mapeamos do faces-config.xml, precisamos colocar o caminho completo da view. Ex: /WEB-INF/pasta1/pasta2/arquivo.tipo. Com webInf bastaria #{param[‘webInf’]}/pasta2/arquivo.tipo. Isso porque pasta1 pode ser renomeada.

resources: justamente para auxiliar ,

homePage: Esse foi o ponto inicial do projeto. Vc ja tentou trabalhar com JSF sem usar URLs apontando para arquivo.tipo?. Ex: no lugar de www.sistema.com/index.xhtml , vc queria www.sistema.com ou www.sistema.com/home . Este framework faz isso. Digamos q vc mapei um outcome para sua pagina inicial #{param[‘webInf’]}/home/arquivo.tipo. Mas vc nao gosta de home, entao sobrescreve o metodo getHomePage() do seu FilterDispatchJSF retornando index, agora terá que atualizar todas as referencias home para index. Mas se usar #{param[‘webInf’]}/#{param[‘homePage’]}/arquivo.tipo não precizará fazer nada quando resolver mudar o nome da pagina inicial( nesse caso a pasta inicial)

defaultPage: é o nome padrao do arquivo chamado em toda requisiçao GET. Pode ser alterado sobrescrevendo o metofo getDefaultPage. Se nao sobrescrever esse metodo, o padrão é index. Ex: #{param[‘webInf’]}/#{param[‘homePage’]}/index.tipo, sobrescreveu para inicial, teria que atualizar tudo para #{param[‘webInf’]}/#{param[‘homePage’]}/inicial.tipo . Caso use #{param[‘webInf’]}/#{param[‘homePage’]}/#{param[‘defaulPage’]}.tipo pouparia trabalho.
Uma curiosidade: isso pode ser bastante velho p\ vcs. Durante meu projeto, notei q o JSF quando usa urlPattern *.tipo, é adicionado automaticamente o .tipo na navegação vinda dos , se nao encontrar o arquivo, ele tentará .jsp. Assim bastaria #{param[‘webInf’]}/#{param[‘homePage’]}/inicial que o jsf adicionaria o .tipo. Pelo menos usando o mojarra 2.0.9 acontecia isso.

este framewok nao aceita query string. Se requisitar www.sistema.com/produto?id=9 vai recebe um HTTP Status 406. Botei esse erro pq poderia usar www.sistema.com/produto/9 e recuperar esse paramento na sua view com #{param[‘0’]} para fazer as açoes no seu ManagedBean. No google existem exemplos de como trabalhar com paramentos em JSF

Para saber oq é ou nao paramentro, é simples. FilterDispatch te disponibilza 1 nivel para recursos(pasta), sendo o restante parametros de requisição, começando por zero, como os indices de um array. Isso nao siguinifica um arquivo por pasta. E sim varias pastas. Cada uma com varios arquivos, sendo apenas o defaultPage acessivel via GET, e o restante com regras de navegação JSF. Ex: ip/pasta1/parametro0/parametro1/parametro2/…

Explicar apenas com palavras é complicado. Por isso fiz um tutorial em pdf e o coloquei no download. Sei q o tempo de vcs é mt curto. O meu tambem é…
Peço, que quando tiverem 1 hora livre, baixem o framework e leiam o tutorial, sao poucas paginas, poucos textos e algumas figuras.

Briga! Briga! gosto mt de briga… briga dos outros.

Qualquer duvida, respondo assim q possivel. Vlw.

Passo um exemplo de query string com JSF
Objetivo: Construir uma pagina que exiba produtos pelo id, usando a seguinte url localhost:8080/teste/produto/exibe.xhtml?id=9

Crie um projeto JSF com o nome teste e altere o url pattern para *.xhtml;
Adicine o classe Produto:

[code]package meupacote;

import java.math.BigDecimal;

public class Produto {
private Integer id;
private String descricao;
private BigDecimal preco;

public Produto() {
	super();
}

public Produto(Integer id, String descricao, BigDecimal preco) {
	super();
	this.id = id;
	this.descricao = descricao;
	this.preco = preco;
}

// gettes and setters

}[/code]
Adicione a classe ProdutoBean:

[code]package meupacote;

import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@RequestScoped
public class ProdutoBean {
private Map<Integer, Produto> produtos;
private Integer id;

public ProdutoBean() {
	super();
	String paramId = FacesContext.getCurrentInstance().getExternalContext()
			.getRequestParameterMap().get("id");
	if (paramId != null) {
		id = new Integer(paramId);
	}
	produtos = new LinkedHashMap<Integer, Produto>();
	produtos.put(1, new Produto(1, "xxx", new BigDecimal(111.11)));
	produtos.put(2, new Produto(2, "yyy", new BigDecimal(222.22)));
	produtos.put(3, new Produto(3, "zzz", new BigDecimal(333.33)));
}

public Produto getProduto() {
	return produtos.get(id);
}

}[/code]
Em WebContent/ crie a pasta produto/ e adicione o arquivo exibe.xhtml:

[code]<?xml version="1.0" encoding="UTF-8"?>

<h:head>
Produto
</h:head>

Exibe Produto Id #{p.id} Descrição #{p.descricao} Preço [/code] Inicie o servidor e acesse [url]http://localhost:8080/test/produto/exibe.xhtml?id=2[/url] Se tudo ocorreu certo, a saida será: [img]http://img843.imageshack.us/img843/479/saidab.png[/img]

Fiz isso usando apenas JSF. Agora vou adicionar FilterDispatch

Pare o servidor
Adicione o jar filterdispatch-1.xx.jar
Adicione a classe MeuFD

[code]package meupacote;

import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;

import com.gmail.marcelojuniorceara.filterdispatch.FilterDispatchJSF;

@WebFilter(urlPatterns = “*”, dispatcherTypes = DispatcherType.REQUEST)
public class MeuFD extends FilterDispatchJSF {

}[/code]
Edite na classe ProdutoBean

		String paramId = FacesContext.getCurrentInstance().getExternalContext()
				.getRequestParameterMap().get("id");

para

		String paramId = FacesContext.getCurrentInstance().getExternalContext()
				.getRequestParameterMap().get(0);

Em WebContent/WEB-INF/ crie a pasta MeuFD/
Em WebContent/ recorte a pasta produto/ e cole dentro de WebContent/WEB-INF/MeuFD/
Em WebContent/WEB-INF/MeuFD/produto/ renomeie o arquivo exibe.xhtml para index.xhtml
Inicie o servidor e acesse http://localhost:8080/test/produto/2
Se tudo ocorreu certo, a saida será:

Neste ponto, FilterDispatch só ajuda. :thumbup:

Esse fds estive fora do pc. Bem, lá vai:

[quote=marcelojunior][quote][quote]O que eu vi de melhor aí, no caso que estou usando JSF acho que os links e a proteção dos arquivos.
Mas no caso, as regras de navegação do jsf continuarao na mesma?[/quote]
Concordo com ele que a única vantagem que eu vi foi a questão do link. Proteção de arquivo não vejo vantagem alguma nisso. Basta configurar filter/JAAS/Spring Security corretamente e tudo funciona numa boa. [/quote]
Serio? isso é novo p\ mim. Vou pesquisar.[/quote]
Sim. Tem exemplos na minha assinatura caso te interesse

quando usa-se numa pagina, algumas vezes temos problema com o caminho correto do atributo “src”. No lugar de usar
Vc usaria [/quote]Com JSF não precisa desse comando louco mais para utilizar script. Basta utilizar o recurso de libraries nativo do JSF. Ele faz inclusive melhor, nem precisa passar o caminho físico. Um post meu chamado JSF mini livro mostra como fazer, a tag ficaria assim <h:outputStylesheet library=“css” name=“estilo.css”/>. Funciona com javascript e imagens também. E esse tipo de abordagem aceita versionamento e outras vantagens.

Isso aqui é o que eu queria entender melhor o que é? E como funciona.[/quote]
webInf: quando mapeamos do faces-config.xml, precisamos colocar o caminho completo da view. Ex: /WEB-INF/pasta1/pasta2/arquivo.tipo. Com webInf bastaria #{param[‘webInf’]}/pasta2/arquivo.tipo. Isso porque pasta1 pode ser renomeada.

resources: justamente para auxiliar ,

homePage: Esse foi o ponto inicial do projeto. Vc ja tentou trabalhar com JSF sem usar URLs apontando para arquivo.tipo?. Ex: no lugar de www.sistema.com/index.xhtml , vc queria www.sistema.com ou www.sistema.com/home . Este framework faz isso. Digamos q vc mapei um outcome para sua pagina inicial #{param[‘webInf’]}/home/arquivo.tipo. Mas vc nao gosta de home, entao sobrescreve o metodo getHomePage() do seu FilterDispatchJSF retornando index, agora terá que atualizar todas as referencias home para index. Mas se usar #{param[‘webInf’]}/#{param[‘homePage’]}/arquivo.tipo não precizará fazer nada quando resolver mudar o nome da pagina inicial( nesse caso a pasta inicial)

defaultPage: é o nome padrao do arquivo chamado em toda requisiçao GET. Pode ser alterado sobrescrevendo o metofo getDefaultPage. Se nao sobrescrever esse metodo, o padrão é index. Ex: #{param[‘webInf’]}/#{param[‘homePage’]}/index.tipo, sobrescreveu para inicial, teria que atualizar tudo para #{param[‘webInf’]}/#{param[‘homePage’]}/inicial.tipo . Caso use #{param[‘webInf’]}/#{param[‘homePage’]}/#{param[‘defaulPage’]}.tipo pouparia trabalho.
Uma curiosidade: isso pode ser bastante velho p\ vcs. Durante meu projeto, notei q o JSF quando usa urlPattern *.tipo, é adicionado automaticamente o .tipo na navegação vinda dos , se nao encontrar o arquivo, ele tentará .jsp. Assim bastaria #{param[‘webInf’]}/#{param[‘homePage’]}/inicial que o jsf adicionaria o .tipo. Pelo menos usando o mojarra 2.0.9 acontecia isso.[/quote]Achei a syntax um pouco confusa, mas é questão de gosto. Isso ajudaria muito a quem usa navegação por xml.

este framewok nao aceita query string. Se requisitar www.sistema.com/produto?id=9 vai recebe um HTTP Status 406. Botei esse erro pq poderia usar www.sistema.com/produto/9 e recuperar esse paramento na sua view com #{param[‘0’]} para fazer as açoes no seu ManagedBean. No google existem exemplos de como trabalhar com paramentos em JSF

Para saber oq é ou nao paramentro, é simples. FilterDispatch te disponibilza 1 nivel para recursos(pasta), sendo o restante parametros de requisição, começando por zero, como os indices de um array. Isso nao siguinifica um arquivo por pasta. E sim varias pastas. Cada uma com varios arquivos, sendo apenas o defaultPage acessivel via GET, e o restante com regras de navegação JSF. Ex: ip/pasta1/parametro0/parametro1/parametro2/…[/quote] É cara, essa que eu tinha visto que poderia ser a vantagem do framework. Hoje já tem o pretty que faz isso numa boa. Essa questão de pasta como recurso o próprio JSF já faz.

Bem, só dei minha opinião. Espero que isso não te desanime. Boa caminhada aí. [=

Vou ja ler

Tem razao, tinha visto isso numa das apostilas da k19, acho q tem um exemplo com imagens… Acabei esquecendo mesmo.

Rsrs… Realmente ficou confusa, até me perco se nao olhar os exemplo na apostila.

Neste momento ainda estou aprendendo JSF, prentendo começar EJB em breve, depois pesquiso outros frameworks como o pretty.

Que isso fera, vlw pela opinião. Com este projeto revisei muitos conceitos. Entendi melhor o desenvolvimento web. Prentendo seguir essa area mesmo, web.
No futuro, revisarei o FilterDispatch para aplica-lo em sistemas particulares.
Tambem revisarei o Portugol++, para ser minha ferramenta de trabalho, caso for lecionar em alguma instituição. Sem querer me gabar, mas por ser puro C/C++, este interpretador bate de frente com outras implementações de portugol ou algoritmos, usadas atualmente por professores da area
Mais uma vez, vlw. :thumbup: