Preencher formulário do JSF 2.0 (Alteração)

Pessoal, estou com um problema na alteração de um usuário da dataTable, pois quando clico no link de editar ocorre o erro HTTP Status 500, gostaria de saber o porque de está acontecendo este erro, já pesquisei bastante e não encontrei nada parecido. Desde já agradeço a colaboração de todos. Veja o código:

UsuarioBean

@ManagedBean
@ViewScoped
public class UsuarioBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private Repositorios repositorios = new Repositorios();
	private List<Usuario> usuarios = new ArrayList<Usuario>();
	private Usuario usuario = new Usuario();
	private Usuario usuarioSelecionado;

	@PostConstruct
	public void inicializar() {
		Usuarios usuarios = this.repositorios.getUsuarios();
		this.usuarios = usuarios.todos();
	}

	public void salvar() {
		GestaoUsuarios gestaoUsuarios = new GestaoUsuarios(
				this.repositorios.getUsuarios());
		try {
			gestaoUsuarios.salvar(usuario);

			this.usuario = new Usuario();

			FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO,
					FacesUtil.getMensagemI18n("entry_saved"));
		} catch (RegraNegocioException e) {
			FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_ERROR,
					FacesUtil.getMensagemI18n(e.getMessage()));
		}
	}
	
	public boolean isEditando() {
		return this.usuario.getCodigo() != null;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario)
			throws CloneNotSupportedException {
		this.usuario = usuario;
		if (this.usuario == null) {
			this.usuario = new Usuario();
		} else {
			this.usuario = (Usuario) usuario.clone();
		}
	}

UsuarioConverter

@FacesConverter(forClass=Usuario.class)
public class UsuarioConverter implements Converter {

		private Repositorios repositorios = new Repositorios();
		Usuarios usuarios = null;
		
		@Override
		public Object getAsObject(FacesContext context, UIComponent component, String value) {
			
			Usuario retorno = null;
			usuarios = this.repositorios.getUsuarios();
			
			if (value != null && !value.equals("")) {
				
				retorno = usuarios.porCodigo(new Integer(value));
				
				if (retorno == null) {
					String descricaoErro = FacesUtil.getMensagemI18n("entry_does_not_exist");
					FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
							descricaoErro, descricaoErro);
					throw new ConverterException(message);
				}
			}
			
			return retorno;
		}

		@Override
		public String getAsString(FacesContext context, UIComponent component, Object value) {
			if (value != null) {
				Integer codigo = ((Usuario) value).getCodigo();
				System.out.println("Código retornando: "+ codigo.toString());
				return codigo == null ? "" : codigo.toString();
			}
			return null;
		}

}

ConsultaUsuario.xhtml

<ui:composition template="/template/LayoutPadrao.xhtml"
				xmlns="http://www.w3.org/1999/xhtml"
      			xmlns:h="http://java.sun.com/jsf/html"
      			xmlns:ui="http://java.sun.com/jsf/facelets"
      			xmlns:f="http://java.sun.com/jsf/core"
      			xmlns:p="http://primefaces.org/ui">
     
     <ui:define name="titulo">Consulta de Usuários</ui:define>
	
	<ui:define name="conteudo">
	
		<h:outputStylesheet library="css" name="consulta-usuarios.css"/>
		<h:form id="frmPrincipal">
			<p:button outcome="CadastroUsuario" value="Novo Usuário"/>
			
			<p:messages id="messages" showDetail="false" autoUpdate="true"
					closable="true" />
			
			<p:dataTable id="tabela" var="user" value="#{usuarioBean.usuarios}" paginator="true" rows="15">
				<p:column headerText="Nome" sortBy="#{user.nome}">
					<h:outputText value="#{user.nome}"/>
				</p:column>
				
				<p:column headerText="Login">
					<h:outputText value="#{user.login}"/>
				</p:column>
				
				<p:column headerText="Cadastrado em">
					<center>
					 	<h:outputText value="#{user.dataCadastro.time}">
					 		<f:convertDateTime pattern="dd/MM/yyyy" />
					 	</h:outputText>
				 	</center>
				</p:column>
				
				<p:column headerText="Perfil">
					<h:outputText value="#{user.perfil}"/>
				</p:column>
				
				<p:column headerText="Ações">
					<center>
						<h:link outcome="CadastroUsuario">
							<h:graphicImage value="/imagens/editar.png"/>
							<f:param name="codigo" value="#{user.codigo}"/>
						</h:link>							
						
						<p:commandLink action="#{usuarioBean.excluir}" update="tabela">
							<h:graphicImage value="/imagens/excluir.png"/>
							<f:setPropertyActionListener target="#{usuarioBean.usuarioSelecionado}" value="#{user}"/>
							<f:ajax render="@form"/>/
						</p:commandLink>
					</center>
				</p:column>
			</p:dataTable>
		</h:form>
		<h:panelGrid columns="4">
		<h:form id="impressao" target="_blank">
			<h:commandLink actionListener="#{usuarioBean.verPDF}" >
					<h:graphicImage value="/imagens/pdf.png" title="Impressão em PDF"/>
				</h:commandLink>				
			</h:form>
		</h:panelGrid>
	</ui:define>
</ui:composition>

CadastroUsuario.xhtml

<ui:composition template="/template/LayoutPadrao.xhtml"
				xmlns="http://www.w3.org/1999/xhtml"
				xmlns:h="http://java.sun.com/jsf/html"
				xmlns:ui="http://java.sun.com/jsf/facelets"
				xmlns:f="http://java.sun.com/jsf/core"
				xmlns:p="http://primefaces.org/ui">
	
	<ui:define name="titulo">#{usuarioBean.editando ? 'Alterando Usuário' : 'Novo Usuário'}</ui:define>

	<ui:define name="conteudo">
		<f:metadata>
				<f:viewParam name="codigo" value="#{usuarioBean.usuario}" />
		</f:metadata>

		<div align="center">
			<h:form id="frm" styleClass="margem-formulario">

				<p:panel style="width:50%"
					header="#{usuarioBean.editando ? 'Alterando Usuário' : 'Novo Usuário'}">
					<p:panel>

						<p:messages id="messages" showDetail="false" autoUpdate="true"
							closable="true" />
						<h:panelGrid columns="2">

							<h:outputLabel value="Nome" />
							<p:inputText size="50" value="#{usuarioBean.usuario.nome}"
								required="true" label="Nome" />

							<h:outputLabel value="Login" />
							<p:inputText size="50" value="#{usuarioBean.usuario.login}"
								required="true" label="Login" />

							<h:outputLabel value="Senha" />
							<p:password id="passworkFeedback"
								value="#{usuarioBean.usuario.senha}" feedback="true" />

							<h:outputLabel value="Data do cadastro" />
							<p:calendar effect="explode"
								value="#{usuarioBean.usuario.dataCadastro}" required="true"
								label="Data de Cadastro" pattern="dd/MM/yyyy" locale="pt_BR"
								timeZone="America/Sao_Paulo">

							</p:calendar>

							<h:outputLabel value="Permissão de acesso" />
							<p:selectOneMenu id="perfil"
								value="#{usuarioBean.usuario.perfil}">
								<f:selectItem itemLabel="Selecione..." itemValue="Selecione..." />
								<f:selectItem itemLabel="Administrador" itemValue="Administrador" />
								<f:selectItem itemLabel="Usuário" itemValue="Usuário" />
								<f:selectItem itemLabel="Cliente" itemValue="Cliente" />
							</p:selectOneMenu>

							<h:outputLabel />
							<p:commandButton actionListener="#{usuarioBean.salvar}"
								value="Salvar" update="frm" />
						</h:panelGrid>
					</p:panel>
					<p:button value="Novo" outcome="CadastroUsuario" />
					<p:button value="Consulta" outcome="ConsultaUsuario" />
				</p:panel>
			</h:form>
		</div>
	</ui:define>

</ui:composition>