Passar por parâmetro JSF

Boa tarde pessoal, estou com uma dúvida,

Eu tenho uma tela que lista todos os usuários e seus respectivos atributos. Ao lado de cada um deles tem um botão que redireciona para uma outra página para que eu poça edita-lo. Porém, ao ir para a outra página eu queria que passasse o valor “id” para que a pessoa não tenha que digitar o id.

Tela Principal:

	<h2>Cadastro de Usuários:</h2>

	<p:messages id="messages" />
	<p:dataTable var="usuario" value="#{UsuarioMB.usuarios}">
		<p:column headerText="Id">
			<h:outputText value="#{usuario.id}" />
		</p:column>

		<p:column headerText="Nome">
			<h:outputText value="#{usuario.nome}" />
		</p:column>

		<p:column headerText="Senha">
			<h:outputText value="#{usuario.senha}" />
		</p:column>

		<p:column headerText="Descrição">
			<h:outputText value="#{usuario.descricao}" />
		</p:column>

		<p:column headerText="Data de Cadastro">
			<h:outputText value="#{usuario.dataCadastro}" />
		</p:column>

		<p:column headerText="Açôes">

			<p:commandButton action="atualizarUsuario.xhtml"
				icon="ui-icon-pencil" style="background-color: yellow;">
				<f:param name="idUsuario" value="usario.id" />
			</p:commandButton>
			
			<p:commandButton ajax="true"
				action="#{usuarioMB.remove(usuario.id)}" icon="ui-icon-trash"
				style="background-color: red;" update="@form">
			</p:commandButton>

		</p:column>

	</p:dataTable>
	<br />
	<footer>
		<p:commandButton value="Novo" icon="ui-icon-plus"
			action="cadastrarUsuario.xhtml" update="messages"
			style="background-color: green;">

		</p:commandButton>
		<!-- <p:commandButton value="Voltar" icon="ui-icon-arrowreturnthick-1-w"
			action="index.xhtml" update="messages">
		</p:commandButton> -->
	</footer>


</h:form>

Tela Atualização:

<h:head>

</h:head>

<h:body>
<h:form>
<p:messages id=“messages” />
<p:panelGrid columns=“2”>
<p:outputLabel for=“id” value=“ID:” />
<p:spinner id=“id” value="#{UsuarioMB.usuario.id}" />

		<p:outputLabel for="nome" value="Nome:" />
		<p:inputText id="nome" value="#{UsuarioMB.usuario.nome}" />


		<p:outputLabel for="senha" value="Senha:" />
		<p:inputText id="senha" value="#{UsuarioMB.usuario.senha}" />


		<p:outputLabel for="descricao" value="Descrição:" />
		<p:inputTextarea id="descricao"
			value="#{UsuarioMB.usuario.descricao}" />

		<p:commandButton value="Atualizar" icon="ui-icon-star"
			action="#{UsuarioMB.atualizar}" update="messages">
		</p:commandButton>

		<footer>
			<p:commandButton value="Voltar" icon="ui-icon-arrowreturnthick-1-w"
				action="usuario.xhtml" update="messages">
			</p:commandButton>
		</footer>

	</p:panelGrid>
</h:form>

</h:body>

ManagedBean:

package com.devmedia.managedbeans;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.jboss.jandex.TypeTarget.Usage;

import com.devmedia.dao.UsuarioDAO;
import com.devmedia.model.Usuario;

@ManagedBean(name=“UsuarioMB”)
@ViewScoped
public class UsuarioManagedBean {

private Usuario usuario;
private UsuarioDAO usuarioDAO;
private List<Usuario> usuarios;

public UsuarioManagedBean() {		
	usuario = new Usuario();
	usuarioDAO = new UsuarioDAO();
	usuarios = usuarioDAO.listUsuarios();
}

public void limparUsuario() {		
	usuario = new Usuario();
	usuarios = usuarioDAO.listUsuarios();
}

public void cadastrarUsuario() throws SQLException {        
	if (usuarioDAO.insertUsuario(usuario)) {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_INFO,
						"Sucesso!", "Usuário cadastrado com sucesso!"));
		limparUsuario();
	} else {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro!", 
						"Erro no cadastr de usuário!"));
	}
}

public void removerUsuario() throws SQLException {
	if (usuarioDAO.removeUsuario(usuario)) {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_INFO,
						"Sucesso!", "Usuário removido com sucesso!"));
		limparUsuario();
	} else {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro!", 
						"Erro ao remover usuário!"));
	}
}

//	public void atualizar(int idUsuario) throws SQLException {
//		usuario = usuarioDAO.buscarUsuario(idUsuario);
//		if (usuarioDAO.atualizarUsuario(usuario)) {
//			FacesContext.getCurrentInstance().addMessage(
//					null, new FacesMessage(FacesMessage.SEVERITY_INFO,
//							"Sucesso!", "Usuário atualizado com sucesso!"));
//			limparUsuario();
//		} else {
//			FacesContext.getCurrentInstance().addMessage(
//					null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro!", 
//							"Erro ao atualizar usuário!"));
//
//		}
//	}

public void atualizar() throws SQLException {
	if (usuarioDAO.atualizarUsuario(usuario)) {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_INFO,
						"Sucesso!", "Usuário atualizado com sucesso!"));
		limparUsuario();
	} else {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro!", 
						"Erro ao atualizar usuário!"));

	}
}

public void remover(int idUsuario) throws SQLException {
	if (usuarioDAO.remove(idUsuario)) {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_INFO,
						"Sucesso!", "Usuário removido com sucesso!"));
		limparUsuario();
	} else {
		FacesContext.getCurrentInstance().addMessage(
				null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Erro!", 
						"Erro ao remover usuário!"));

	}
}

public Usuario getUsuario() {
	return usuario;
}

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

public List<Usuario> getListaUsuarios() {
	return usuarios;
}

public void setListaUsuarios(List<Usuario> listaUsuarios) {
	this.usuarios = listaUsuarios;
}

public UsuarioDAO getUsuarioDAO() {
	return usuarioDAO;
}

public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
	this.usuarioDAO = usuarioDAO;
}

public List<Usuario> getUsuarios() {
	return usuarios;
}

public void setUsuarios(List<Usuario> usuarios) {
	this.usuarios = usuarios;
}

}

DAO:

package com.devmedia.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.devmedia.model.Usuario;
import com.devmedia.util.Connect;

public class UsuarioDAO extends Connect {

public Usuario buscarUsuario(int idUsuario) {
	Usuario usuario = new Usuario();
	Statement st = null;
	ResultSet rs = null;

	try {
		PreparedStatement preparedStatement = connect().prepareStatement("select * from usuario where id=?");
		preparedStatement.setInt(1, idUsuario);
		rs = preparedStatement.executeQuery();

		usuario.setId(rs.getInt(1));
		usuario.setNome(rs.getString(2));
		usuario.setSenha(rs.getString(3));
		usuario.setDescricao(rs.getString(4));
		usuario.setDataCadastro(rs.getDate(5));

	} catch (SQLException ex) {
		Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
		lgr.log(Level.SEVERE, ex.getMessage(), ex);

	} finally {
		try {
			if (rs != null) {
				rs.close();
			}
			if (st != null) {
				st.close();
			}
			if (connect() != null) {
				connect().close();
			}
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
			lgr.log(Level.WARNING, ex.getMessage(), ex);
		}
	}
	return usuario;
}

// lista todos os usuarios cadastrados no banco de dados
public List<Usuario> listUsuarios() {
	ArrayList<Usuario> lista = new ArrayList<Usuario>();
	Statement st = null;
	ResultSet rs = null;

	try {
		st = connect().createStatement();
		String sql = "select * from usuario ";
		rs = st.executeQuery(sql);

		while (rs.next()) {
			Usuario usuario = new Usuario();
			usuario.setId(rs.getInt(1));
			usuario.setNome(rs.getString(2));
			usuario.setSenha(rs.getString(3));
			usuario.setDescricao(rs.getString(4));
			usuario.setDataCadastro(rs.getDate(5));
			lista.add(usuario);
		}

	} catch (SQLException ex) {
		Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
		lgr.log(Level.SEVERE, ex.getMessage(), ex);

	} finally {
		try {
			if (rs != null) {
				rs.close();
			}
			if (st != null) {
				st.close();
			}
			if (connect() != null) {
				connect().close();
			}
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
			lgr.log(Level.WARNING, ex.getMessage(), ex);
		}
	}
	return lista;
}

/**
 * Inserção do Usuário no banco
 * 
 * @param Usuario {@link com.devmedia.model.Usuario}
 * @return boolean Sucesso ou Falha
 * @throws SQLException 
 */
public boolean insertUsuario(Usuario usuario) {
	try {
		PreparedStatement preparedStatement = connect().prepareStatement(
				"insert into usuario (nome, senha, descricao, data_cadastro) values(?,?,?,?)");
		preparedStatement.setString(1, usuario.getNome());
		preparedStatement.setString(2, usuario.getSenha());
		preparedStatement.setString(3, usuario.getDescricao());
		preparedStatement.setDate(4, new java.sql.Date(new Date().getTime()));
		preparedStatement.execute();
		return true;
	} catch (SQLException ex) {
		Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
		lgr.log(Level.SEVERE, ex.getMessage(), ex);
		return false;
	} finally {
		try {
			if (connect() != null) {
				connect().close();
			}
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
			lgr.log(Level.WARNING, ex.getMessage(), ex);
		}
	}
}

public boolean removeUsuario(Usuario usuario) {
	try {
		PreparedStatement preparedStatement = connect().prepareStatement("delete from usuario where nome=?");
		preparedStatement.setString(1, usuario.getNome());
		preparedStatement.execute();
		return true;
	} catch (SQLException ex) {
		Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
		lgr.log(Level.SEVERE, ex.getMessage(), ex);
		return false;

	} finally {
		try {
			if (connect() != null) {
				connect().close();
			}
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
			lgr.log(Level.WARNING, ex.getMessage(), ex);
		}
	}
}


public boolean atualizarUsuario(Usuario usuario) {
	try {
		PreparedStatement preparedStatement = connect().prepareStatement("update usuario set nome = ?, senha =?, descricao=? where id=?");
		preparedStatement.setString(1, usuario.getNome());
		preparedStatement.setString(2, usuario.getSenha());
		preparedStatement.setString(3, usuario.getDescricao());
		preparedStatement.setInt(4, usuario.getId());
		preparedStatement.execute();
		return true;
	} catch (SQLException ex) {
		Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
		lgr.log(Level.SEVERE, ex.getMessage(), ex);
		return false;

	} finally {
		try {
			if (connect() != null) {
				connect().close();
			}
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
			lgr.log(Level.WARNING, ex.getMessage(), ex);
		}
	}
}

public boolean remove(int idUsuario) {
	try {
		PreparedStatement preparedStatement = connect().prepareStatement("delete from usuario where id=?");
		preparedStatement.setInt(1, idUsuario);
		preparedStatement.execute();
		return true;
	} catch (SQLException ex) {
		Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
		lgr.log(Level.SEVERE, ex.getMessage(), ex);
		return false;
	} finally {
		try {
			if (connect() != null) {
				connect().close();
			}
		} catch (SQLException ex) {
			Logger lgr = Logger.getLogger(UsuarioDAO.class.getName());
			lgr.log(Level.WARNING, ex.getMessage(), ex);
		}
	}
}

}

tentou?