Boa noite galera!!
Venho aqui pedir uma ajudinha para vocês pois já tentei de tudo um pouco para tentar resolver um NullPointerException.
A questão é a seguinte…tenho um banco de dados mapeado (corretamente, já testei
) onde tenho um relacionamento N:N entre as tabelas usuario e perfil onde cria a tabela usuario_perfil que tem apenas as chaves primárias de cada uma. Defini inverse true em perfil, para que somente quando popular em usuario ele persista no banco de dados.
O problema está na hora de popular o objeto perfil.id_tb_perfil no usuario. Vou lhes mostrar o que ocorre.
Temos aqui o código de nosso form:
<s:form method="post" action="UsuarioSave" >
<h1>Cadastro de Usuario</h1>
<s:textfield name="usuario.nome" id="Nome" label="Nome"/>
<s:textfield name="usuario.email" label="Email"/>
<s:textfield name="usuario.matricula" label="Matricula"/>
<s:textfield name="usuario.telefone" label="Telefone"/>
<s:password name="usuario.senha" label="Senha"/>
<s:action name="lista" namespace="/perfil" executeResult="false" id="profs" />
<s:select name="perfil.id_tb_perfil" list="#profs.lista" listValue="perfil" listKey="id_tb_perfil" ></s:select>
<s:submit value="Cadastrar" />
</s:form>
A action deste form me levará ao método insere desta classe:
private Usuario usuario;
private List lista;
private Perfil perfil;
/*...*/
public String insere() {
Perfil p = new Perfil();
Perfil p2 = new Perfil();
p2.setId_tb_perfil(2);
p = (Perfil) getPerfil();
System.out.print("O que tamo trazendo eh: "+p.getId_tb_perfil()+" fim \n");
if(!p.equals(null)){
usuario.getPerfil().add(p);
}
else if(p.equals(null)){
usuario.getPerfil().add(p2);
}
if(new UsuarioDaoImpl().add(usuario)) {
System.out.println("conseguiu inserir");
} else {
System.out.println("deu um erro doidao");
}
return SUCCESS;
}
/*
...
gets e set sets omitidos
*/
Coloquei o if e o else if daquela forma pura e simplesmente para me asegurar que não estou recebendo objetos com valores nulos (para apurar onde está o erro).
A variável Perfil p2 = new Perfil() ilustra o teste que eu fiz para perceber que realmente o código está inserindo… no código contido no else if() o objeto é adicionado corretamente ao usuario e persistido no DB.p.equals(null)
Minha pergunta é…porque raios que mesmo o objeto p que recebe (e de fato recebe, pois testei no print e ele me imprime o valor correto) o select do form (que me retorna o id da tabela perfil) não estando com valor null e não consegue popular o objeto usuario. Pois é exatamente na parte usuario.getPerfil().add§; que se encontra meu NullPointerException
.
Se alguém puder me dar uma luz aqui seria imensamente grato.
Obrigado 