Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Cadastro com validação

Pessoal, atualmente o meu sistema possui Pessoa e Time, uma pessoa ja pode criar um Time, definindo alguns atributos(nome e senhaTime).

Agora, tenho como objetivo criar um metodo "Entrar em Time" onde uma pessoa qualquer vai entrar em um time ja existente passando o ID e a SenhaTime.

Ja fiz alguns metodos de cadastro, mas estou com duvida em como fazer essa validação se a SenhaTime informada pela Pessoa confere com a SenhaTime do ID informado.

Model Time:

@Entity
public class Time implements Serializable{

    private static final long serialVersionUID = 1L;

insira seu código aqui

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column (name = "id_Time")
    private int id;

    @Column(nullable = false)
    private String nome;

    @Column(nullable = false)
    private String senhaTime;


    @OneToMany(mappedBy = "time",cascade = CascadeType.MERGE)
    private List<PessoaTime> listaPessoaTime;

    @OneToMany(mappedBy="time",cascade = CascadeType.MERGE)
    private List<CampeonatoTime> listaCampeonatoTime;

    public Time(){}

    public Time(Time time){
        this.id = time.getId();
        this.nome = time.getNome();
        this.senhaTime = time.getSenhaTime();
    }

TimeBean:

    public void cadastrar() {    
        /*    cadastra o time    */
        getTimeDAO().cadastrar(getTime());    
        /*cadastra na associativa PessoaTime*/
        getPessoaTimeDAO().cadastrar(getPessoaTime(getPessoaBean().usuarioLogado(), getTime())); 
        limpaTela();
    }

    /* Cria uma pessoa time */
    public PessoaTime getPessoaTime(Pessoa pessoa, Time time){
        PessoaTime p = new PessoaTime();
        p.setPessoa(pessoa);
        p.setTime(time);
        p.setCargo(Cargo.ADMINISTRADOR);
        return p;
    }

    public PessoaTime entrarEmTime(Pessoa pessoa, Time time){
        PessoaTime p = new PessoaTime();
        p.setPessoa(pessoa);
        p.setTime(time);
        p.setCargo(Cargo.MEMBRO);
        return p;
    }

criarTime.xhtml:

<h:form class="form-label" id="entrarTime">
                            <div class="form-group row">
                                <label for="thread" class="col-md-2">ID Time:</label>
                                <div class="col-md-10">
                                    <h:inputText value="#{timeMB.time.id}" type="nome" class="form-control" id="nome" placeholder="informe o ID do Time"/>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label for="description" class="col-md-2">Senha do Time:</label>
                                <div class="col-md-10">
                                    <h:inputSecret value="#{timeMB.time.senhaTime}" type="password" class="form-control" id="senha" placeholder="Senha do seu Time"/>
                                </div>
                            </div>    

                            <div class="text-center">
                                  <h:commandButton action="#{timeMB()}"  value="Cadastrar" class="btn btn-primary btn-lg btn-rounded btn-shadow"/>
                        </div>
                        </h:form>

So pra deixar claro, minha duvida seria em fazer o metodo que vai verificar se o ID e SenhaTime informados conferem.

5 respostas

Olá,

As suas últimas publicações dizem mais a respeito de JPA e Hibernate do que JavaServer Faces.

Sugiro publicar suas dúvidas no fórum de JPA e Hibernate.

Caso a senha tenha sido criptografada:

Consulte o time no banco de dados pelo ID e compare se as senhas são iguais.

Ex:

/**
 * Valida se a senha do time é válida pelo id.
 */
public boolean isAcessoTimeValido(Long id, String senha)  {
    Time time = getTimeDAO().obterPorId(id);
    String senhaCriptografada = // criptografar a senha;
    return time.getSenhaTime().equals(senhaCriptografada);
}

Se a senha não for criptografada, basta fazer da seguinte forma:

Time time = getTimeDAO().consultarPorIdSenha(id, senha);

if (time != null) {
    // senha do time confere, basta cadastrar o vínculo.
}

Jonathan Pereira

Obrigado Jonathan, vou verificar e tentar aplicar isso durante o fim de semana. Se tudo der certo eu volto para marcar sua resposta como favorita.

Cassius, o tópico esta na arena geral de Java Web.

solução!

Jonathan, atualmente esta assim:

TimeBean:

public void entrarEmTime(){

            getPessoaTimeDAO().cadastrar(getPessoaTimeMembro(getPessoaBean().usuarioLogado(), getTime()));
            limpaTela();
    }

public PessoaTime getPessoaTimeMembro(Pessoa pessoa, Time time){
        PessoaTime p = new PessoaTime();
        p.setPessoa(pessoa);
        p.setTime(time);
        p.setCargo(Cargo.MEMBRO);
        return p;
    }

EntrarTime.xhtml:

<h:form class="form-label" id="entrarTime">
                                        <div class="form-group row">
                                            <label for="thread" class="col-md-2">ID Time:</label>
                                            <div class="col-md-10">
                                                <h:inputText value="#{timeMB.time.id}" type="nome"
                                                    class="form-control" id="nome"
                                                    placeholder="Adicione um nome ao seu time" />
                                            </div>
                                        </div>
                                        <div class="form-group row">
                                            <label for="description" class="col-md-2">Senha do
                                                Time:</label>
                                            <div class="col-md-10">
                                                <h:inputSecret value="#{timeMB.time.senhaTime}"
                                                    type="password" class="form-control" id="senha"
                                                    placeholder="Senha do seu Time" />
                                            </div>
                                        </div>
                                        <div class="text-center">
                                            <h:commandButton action="#{timeMB.entrarEmTime()}"
                                                value="Entrar"
                                                class="btn btn-primary btn-lg btn-rounded btn-shadow" />
                                        </div>
                                    </h:form>

Como pode ver, ainda não coloquei a validação. Como sera esse metodo "consultarPorIdSenha(id, senha);" que você colocou no seu exemplo ?

Rafael,

Você precisa seguir a seguinte lógica:

  1. Buscar o time pelo ID informado pelo usuário utilizando a sua DAO criada para o Time;
  2. Validar se existe o time com o ID informado, você pode fazer isto verificando se a sua consulta do passo 1 retornou algum time;
  3. Verificar se a senha informada pelo usuário é a mesma do time cadastrado, este time cadastrado é o que você consultou no passo 1, e a senha informada é a do Time parâmetro do método ;

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software