[Tutorial] Página de pesquisa dinâmica com JSF

Pessoal depois de bater muito a cabeça em busca de informações, finalmente consegui finalizar minha página de pesquisa dinâmica com JSF, estou postando abaixo um exemplo muito básico e lembrando que não sei se segue os melhores padrões.

Link para pesquisa: http://localhost:8080/Projeto/mostraUsuario.jsf?email=usuario1@dominio.com

Não fiz tratamentos avançados, mas se o valor estiver na lista a página é populada, caso não a página é mostrada sem o valor dos campos nome e email.

Eu presumo que vocês já tenham um conhecimento prévio de jsf portanto segue somente os arquivos envolvidos.

Página mostraUsuario.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Cadastro de Usuário</title>
</h:head>
<h:body>
	<f:metadata>
		<f:viewParam name="email" value="#{usuarioBean.usuario.email}"></f:viewParam>
		<f:event listener="#{usuarioBean.pesquisar}" type="preRenderView"></f:event>
	</f:metadata>
	<h1>Cadastro de Usuário</h1>
	<hr />
	Nome: <h:outputText value="#{usuarioBean.usuario.nome}" />
	<br />
	E-mail: <h:outputLink value="mailto:#{usuarioBean.usuario.email}">
		<h:outputText value="#{usuarioBean.usuario.email}" />
	</h:outputLink>
	<br />
</h:body>
</html>
package com.projeto;

import java.util.ArrayList;
import java.util.List;

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

@ManagedBean(name = "usuarioBean")
@RequestScoped
public class UsuarioBean {

	private Usuario usuario = new Usuario();

	private List<Usuario> usuarios;

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public UsuarioBean() {
		usuarios = new ArrayList<Usuario>();
		usuarios.add(new Usuario("Usuario1", "usuario1@dominio.com"));
		usuarios.add(new Usuario("Usuario2", "usuario2@dominio.com"));

	}

	public void pesquisar() {
		boolean found = false;
		for (int i = 0; i < usuarios.size(); i++) {
			Usuario temp = usuarios.get(i);
			if (temp.getEmail().contains(usuario.getEmail())) {
				usuario = temp;
				found = true;
				break;
			}
		}
		if (!found) {
			usuario.setEmail("");
		}
	}

}

Parabéns pela iniciativa.

Aqui também tem um exemplo: http://uaihebert.com/?p=751