[Resolvido] setPropertyActionListener com primefaces

Preciso pegar uma linha do datatable para alterar ou excluir. Estou usando o setPropertyActionListener mas está dando erro.
Já olhei em vários tutoriais mas não consigo resolver.

Meu datatable:

<?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:ui="http://java.sun.com/jsf/facelets"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Lista de Usu&aacute;rio</title>
<style> 
.ui-widget, 
.ui-widget .ui-widget { 
font-size: 12px !important; 
} 
</style>
</h:head>
<h:body>
<h:form>
   <p:dataTable id="listaUsuario" var="usuario" value="#{usuarioBean.lista}">
   
   <p:column style="width:120px;">  
            <f:facet name="header">  
                <h:outputText value="C&oacute;digo" />  
            </f:facet>  
            <h:outputText value="#{usuario.id}"/>  
   </p:column> 
   <p:column style="width:120px;">  
            <f:facet name="header">  
                <h:outputText value="Nome" />  
            </f:facet>  
            <h:outputText value="#{usuario.nome}"/>  
   </p:column>
   <p:column style="width:120px;">  
            <f:facet name="header">  
                <h:outputText value="Status" />  
            </f:facet>  
            <h:outputText value="#{usuario.status}"/>  
   </p:column>
   <p:column style="width:120px;">  
            <f:facet name="header">  
                <h:outputText value="E-mail" />  
            </f:facet>  
            <h:outputText value="#{usuario.email}"/>  
   </p:column>
   <p:column>  
       <h:commandLink action="#{usuarioBean.alterar}" value="Editar">
         <f:setPropertyActionListener target="#{usuarioBean.usuario}" value="usuario" /> 
       </h:commandLink>  
   </p:column>
   <p:column>  
       <h:commandLink action="#{usuarioBean.inserir}" value="Excluir">
         <f:setPropertyActionListener target="#{usuarioBean.usuario}" value="usuario" /> 
       </h:commandLink>  
   </p:column>
   </p:dataTable>
</h:form>
</h:body>
</html>

Meu managedBean:

package classe.controle.Beans;

import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import classe.modelo.dao.UsuarioDao;
import classe.modelo.vo.Municipio;
import classe.modelo.vo.Usuario;

@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioBean {
	private int id;
	private String login;
	private String senha;
	private String status;
	private String cnpjCpf;
	private String razaoSocial;
	private String nome;
	private String inscrEstadual;
	private String rg;
	private String inscrMun;
	private String rua;
	private String complemento;
	private String numero;
	private String bairro;
	private int idmunicipio; // campo municipio id
	private String cep;
	private String telefone;
	private String www;
	private String email;
	private String obs;
	private Date dtCadastro;
	private String sts;
	private int idempresa;
    private ArrayList<Usuario> lista;
    
	Usuario usuario = new Usuario();

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getCnpjCpf() {
		return cnpjCpf;
	}

	public void setCnpjCpf(String cnpjCpf) {
		this.cnpjCpf = cnpjCpf;
	}

	public String getRazaoSocial() {
		return razaoSocial;
	}

	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	public String getNome() {
		return nome;
	}

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

	public String getInscrEstadual() {
		return inscrEstadual;
	}

	public void setInscrEstadual(String inscrEstadual) {
		this.inscrEstadual = inscrEstadual;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getInscrMun() {
		return inscrMun;
	}

	public void setInscrMun(String inscrMun) {
		this.inscrMun = inscrMun;
	}

	public String getRua() {
		return rua;
	}

	public void setRua(String rua) {
		this.rua = rua;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public int getIdmunicipio() {
		return idmunicipio;
	}

	public void setIdmunicipio(int idmunicipio) {
		this.idmunicipio = idmunicipio;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public String getWww() {
		return www;
	}

	public void setWww(String www) {
		this.www = www;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getObs() {
		return obs;
	}

	public void setObs(String obs) {
		this.obs = obs;
	}

	public Date getDtCadastro() {
		return dtCadastro;
	}

	public void setDtCadastro(Date dtCadastro) {
		this.dtCadastro = dtCadastro;
	}

	public String getSts() {
		return sts;
	}

	public void setSts(String sts) {
		this.sts = sts;
	}

	public int getIdempresa() {
		return idempresa;
	}

	public void setIdempresa(int idempresa) {
		this.idempresa = idempresa;
	}

	public Usuario getUsuario() {
		return usuario;
	}

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

	public void setLista(ArrayList<Usuario> lista) {
		this.lista = lista;
	}

	public ArrayList<Usuario> getLista() {
		lista = UsuarioDao.listar();
		return lista;
	}

	public String inserir() {
		usuario.setMunicipio(new Municipio());
		usuario.setRazaoSocial(nome);
		usuario.setNome(nome);
		usuario.setLogin(login);
		usuario.setSenha(senha);
		usuario.setStatus(status);
		usuario.setEmail(email);
		usuario.setTelefone(telefone);
		usuario.setCnpjCpf(cnpjCpf);
		usuario.setRg(rg);
		usuario.setRua(rua);
		usuario.setComplemento(complemento);
		usuario.setNumero(numero);
		usuario.setBairro(bairro);
		usuario.getMunicipio().setId(idmunicipio);
		usuario.setObs(obs);
		UsuarioDao usrDao = new UsuarioDao();
		try {
			Boolean inserir = usrDao.inserir(usuario);
			if (inserir != false) {
				System.out.println("OK.Graças à Deus e Nossa Senhora!!!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;

	}

	
	public void alterar(Usuario usuario){
		
		System.out.println(this.usuario.getId());
		
	}

}

O problema está no método alterar.

A mensagem é a seguinte:

AVISO: Cannot convert usuario of type class java.lang.String to class classe.modelo.vo.Usuario
java.lang.IllegalArgumentException: Cannot convert usuario of type class java.lang.String to class classe.modelo.vo.Usuario
at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:374)
at org.apache.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:46)
at com.sun.faces.facelets.tag.jsf.core.SetPropertyActionListenerHandler$SetPropertyListener.processAction(SetPropertyActionListenerHandler.java:204)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:1093)
at org.primefaces.component.datatable.DataTable.broadcast(DataTable.java:630)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)

Tenta: <f:setPropertyActionListener target="#{usuarioBean.usuario}" value="#{usuario}" />

Valeu jakefrog, o problema era esse.