I'm developing a web application using the play framework, in which I'm finishing the CRUD of a user, but this is missing only the part where the user saves his profile photos in the registry. As I have little experience with the web, I'm having trouble saving the user's image and then returning it on the list screen.
This is my registration class:
public class Funcionarios extends Controller {
public static void form() {
long funcCount = Agente.count();
System.out.println(funcCount);
render(funcCount);
}
@AuditoriaOvitrampas
public static void cadastrar(@Valid Agente funcionario, String senha) throws Exception {
Agente funcionarioBanco = Agente.find("email = ? or login = ?", funcionario.email, funcionario.login).first();
if (funcionario.id == null) {
if (funcionarioBanco != null && funcionarioBanco.id != funcionarioBanco.id && funcionarioBanco.foto == null) {
validation.addError("funcionario.email", "E-mail já existente");
validation.addError("funcionario.login", "Usuário já existente");
validation.addError("funcionario.foto", "Imagem já cadastrada");
}
if (validation.hasErrors() || !funcionario.senha.equals(senha)) {
validation.addError("funcionario.senha", "Senha não corresponde");
params.flash();
validation.keep();
form();
}
funcionario.senha = Crypto.passwordHash(senha);
validation.valid("cadastrado com sucesso");
funcionario.save();
session.get("usuarioLogado");
listar(null);
} else {
validation.valid("editado com sucesso");
funcionario.save();
session.get("usuarioLogado");
listar(null);
}
}
public static void detalhesFuncionarios(Long id) {
Agente f = Agente.findById(id);
renderTemplate("Funcionarios/detalhesFuncionarios.html", f);
}
@AuditoriaOvitrampas
public static void editarFuncionarios(Long id) {
Agente f = Agente.findById(id);
renderTemplate("Funcionarios/form.html", f);
}
public static void listar(String parametroBusca) {
List<Agente> funcionarios = null;
if (parametroBusca == null) {
funcionarios = Agente.find("status != ?", Status.INATIVO).fetch();
}
render(funcionarios, parametroBusca);
}
@AuditoriaOvitrampas
public static void perfil(Long id){
String perfil = session.get("usuarioLogado");
Agente f = Agente.find("login = ?", perfil).first();
renderTemplate("Funcionarios/perfil.html", f);
}
@AuditoriaOvitrampas
public static void removerFuncionarios(Long id) {
Agente funcionario = Agente.findById(id);
if(funcionario.email.equals("[email protected]")){
validation.addError("funcionario.email", "E-mail já existente");
listar(null);
}
funcionario.status = Status.INATIVO;
funcionario.save();
flash.success("Removido com sucesso");
listar(null);
}
public static void formTrocarSenha() {
render();
}
public static void trocarSenha(String senhaAtual, String novaSenha1, String novaSenha2){
String senha = session.get("usuarioSenha");
if(senha.equals(Crypto.passwordHash(senhaAtual))){
if(novaSenha1.equals(novaSenha2)) {
Agente f = Agente.findById(Long.parseLong(session.get("usuarioId")));
f.senha = Crypto.passwordHash(novaSenha1);
f.save();
session.put("usuarioSenha", f.senha);
renderTemplate("Funcionarios/perfil.html", f);
flash.success("Senha alterada com sucesso!");
}
else{
flash.error("Senhas não são iguais");
renderTemplate("Funcionarios/formTrocarSenha.html");
}
} else {
flash.error("Senha atual não corresponde a senha do usuário");
renderTemplate("Funcionarios/formTrocarSenha.html");
}
}
}
My model:
@Entity
public class Agente extends Model{
@Required
public String nome;
@Required
public String funcao;
@Required
@MinSize(6)
public String login;
@MinSize(6)
@MaxSize(15)
public String senha;
@Required
@Email
public String email;
public Blob foto;
@OneToMany(mappedBy="agente")
public List<Palheta> palhetas;
@Enumerated(EnumType.STRING)
public Status status;
public Agente() {
status = Status.ATIVO;
}
And my HTML form:
<section class="forms">
<form action="@{funcionarios.cadastrar}" method="post">
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="hidden" name="funcionario.id" value="${f?.id}" />
<div class="form-group">
<label>Nome completo:</label> <input type="text"
name="funcionario.nome" class="form-control"
value="${flash['funcionario.nome'] ? flash['funcionario.nome'] : f?.nome}">
<span class="alert-danger">#{error 'funcionario.nome' /}</span>
</div>
<div class="form-group">
<label>Email:</label> <input type="email" name="funcionario.email"
class="form-control" placeholder="[email protected]"
value="${flash['funcionario.email'] ? flash['funcionario.email'] : f?.email}">
<span class="alert-danger">#{error 'funcionario.email' /}</span>
</div>
<div class="form-group">
<label>Função:</label> <select name="funcionario.funcao"
class="form-control"
value="${flash['funcionario.funcao'] ? flash['funcionario.funcao'] : f?.funcao}">
<option>Agente de Endemias</option>
<option>Laboratorista</option>
</select> <span class="alert-danger">#{error 'funcionario.funcao' /}</span>
</div>
<div class="form-group">
<label>Adicionar foto do perfil:</label> <input type="file"
name="funcionario.foto" class="form-control">
</div>
</div>
<div class="col-lg-6">
#{if f}
<div class="form-group">
<label>Matrícula:</label> <input id="loginUsuario" type="text"
placeholder="Mínimo 5 caracteres" name="funcionario.login"
class="form-control" disabled="disabled"
value="${flash['funcionario.login'] ? flash['funcionario.login'] : f?.login}">
<span class="alert-danger">#{error 'funcionario.login' /}</span>
</div>
#{/if} #{ifnot f}
<div class="form-group">
<label>Matrícula:</label> <input id="loginUsuario" type="text"
placeholder="Mínimo 5 caracteres" name="funcionario.login"
class="form-control"
value="${flash['funcionario.login'] ? flash['funcionario.login'] : f?.login}">
<span class="alert-danger">#{error 'funcionario.login' /}</span>
</div>
<div class="form-group">
<label>Senha:</label> <input type="password"
name="funcionario.senha" class="form-control"
placeholder="Mínimo 6 caracteres"
value="${flash['funcionario.senha'] ? flash['funcionario.senha'] : f?.senha}">
<span class="alert-danger">#{error 'funcionario.senha' /}</span>
</div>
<div class="form-group">
<label>Confirmar senha:</label> <input type="password"
placeholder="Mínimo 6 caracteres" name="senha"
class="form-control"> <span class="alert-danger">#{error
'senha' /}</span>
</div>
</div>
#{/ifnot}
<div class="col-lg-12">
<button type="submit" class="btn btn-primary">Salvar</button>
<button type="reset" class="btn btn-danger"
onclick="window.location.href='/funcionarios/listar';">
Cancelar</button>
</div>
</div>
</div>
</form>