Sim, está chegando, e populando dos campos corretamente.
Só que ele não altera os dados, depois de enviar o formulário.
Print do formulário edita:
https://drive.google.com/open?id=0B7NlcsEHVJhhLUdNYlZBRk5zUFk
Segue o código:
edita.jps
...
<div>
<form class="form-style" action="<c:url value='/usuario/${usuario.id}/'/>" method="POST">
<label for="nome">Nome do usuário:</label>
<input type="text" name="usuario.nome" id="nome" class="form-control" value="${usuario.nome}" required autofocus />
<label for="email">Email:</label>
<input type="text" name="usuario.email" id="email" class="form-control" value="${usuario.email}" required />
<label for="tipo">Tipo de Usuário:</label>
<select class="form-control" name="usuario.tipo" id="tipos" >
<c:forEach var="tip" items="${tipoUsuario}">
<option value="${tip.tipoUsuario}">${tip.tipoUsuario}</option>
</c:forEach>
</select>
<label for="login">Login:</label>
<input type="text" name="usuario.login" id="login" class="form-control" value="${usuario.login}" required/>
<button class="btn btn-success" type="submit" name="_method" value="PUT"> Alterar Usuário</button>
</form>
</div>
...
UsuarioDao
public Usuario edita(int id){
result.include("tipoUsuario", TipoUsuario.values());
return usuarioDao.carrega(id);
}
@Put("/usuario/{usuario.id}")
public void altera(@Valid Usuario usuario){
validator.onErrorRedirectTo(this).form();
usuarioDao.atualiza(usuario);
result.redirectTo(this).lista();
}
UsuarioDao
public void atualiza (Usuario usuario){
try{
manager.getTransaction().begin();
manager.merge(usuario);
manager.getTransaction().commit();
}catch (Exception e) {
manager.getTransaction().rollback();
}
}
public Usuario carrega (int id){
return (Usuario) this.manager.find(Usuario.class, id);
}