Tela não carrega os campos[RESOLVIDO]

Estou com um erro quando eu faço alguma alteração no meu form e dou salvar e um novo ele limpa a tela e vai para tela de cadastrar um novo usuário.Quando isso acontece não carrega dois campos dessa tela. Parece um erro fácil de arrumar mais não estou conseguindo.


Bean

@ManagedBean(name = "usuarioMB")

@ViewScoped
public class UsuarioBean implements Serializable {

private Usuario usuario;

private List<Empresa> empresas;
private List<CentroCusto> centrosCusto;
private List<Programa> programas;
private List<Usuario> usuariosPesquisados;
private List<Permissao> permissoes;
private List<Usuario> usuariosDe;
private List<Usuario> usuariosPara;
private List<Sistema> sistemas;
private List<DepartamentoProjetos> dpProjetos;

private UsuarioDAO usuarioDAO;
private EmpresaDAO empresaDAO;
private CentroCustoDAO centroCustoDAO;
private ProgramaDAO programaDAO;
private PermissaoDAO permissaoDAO;
private SistemaDAO sistemaDAO;
private DepartamentoProjetosDAO departamentoProjetosDAO;

private int pesquisa;
private int usuarioDe;
private int usuarioPara;
private String usuarioPesquisa;
private String conteudoPesquisa;
private String verificaSenha;
private String confirmaEmail;
private String confirmaSenha;
private String senhaAux = "";
private boolean somenteLeitura;
private boolean podeSalvar;
private boolean statusNovo;
private boolean statusSalvar;
private boolean statusPesquisar;
private boolean statusCancelar;
private boolean isNovo;
private boolean showDialog;

public UsuarioBean() {
    this.usuario = new Usuario();
    usuario.setDepartamentoProjetos(new DepartamentoProjetos());
    this.usuarioDAO = new UsuarioDAO();
    this.empresaDAO = new EmpresaDAO();
    this.centroCustoDAO = new CentroCustoDAO();
    this.programaDAO = new ProgramaDAO();
    this.permissaoDAO = new PermissaoDAO();
    this.sistemaDAO = new SistemaDAO();
    this.departamentoProjetosDAO = new DepartamentoProjetosDAO();
    this.pesquisa = 1;
    //this.usuarioPesquisa = "";
    this.usuariosPesquisados = new ArrayList<Usuario>();
    this.permissoes = new ArrayList<Permissao>();
    this.dpProjetos = new ArrayList<DepartamentoProjetos>();
    this.somenteLeitura = false;
    this.confirmaEmail = "";
    this.confirmaSenha = "";
    this.statusNovo = false;
    this.statusPesquisar = false;
    this.statusSalvar = true;
    this.statusCancelar = true;
    this.showDialog = false;

    listarEmpresas();
    listarCentroCusto();
    listarProgramas();
    listarDepartamentoProjetos();

}

/**
 * Metodo que lista permissões de usuario
 *
 * @param id
 */
public void listarPermissoes(int id) {
   
    permissoes = permissaoDAO.listarPermissao(id);
}

public void listarSistemas() {
    sistemas = sistemaDAO.getSistemaByPesquisa(pesquisa, conteudoPesquisa);
}

/**
 * metodo testa se as senhas são equivalentes
 */
public void senhaEquivalente() {
    if (!usuario.getSenha().equals(this.confirmaSenha)) {
        this.confirmaSenha = "";
        UtilSistemas.mostrarMensagemErro("Campo inválido", "Senha incorreta!");
    }
}
/**
 * Método que verifica se o email é válido
 */
public void validarEmail() {
    if (!UtilSistemas.isEmailValido(usuario.getEmail())) {
        UtilSistemas.mostrarMensagemErro("Campo inválido", "Email incorreto!");
    }
}

/**
 * metodo testa se os emails digitados sao equivalentes
 */
public void emailEquivalente() {
    if (!usuario.getEmail().equals(this.confirmaEmail)) {
        this.confirmaEmail = "";
        UtilSistemas.mostrarMensagemErro("Email não validou", "Os emails não são equivalentes");

    }
}
/**
 * valida o cpf na view
 *
 */
public void validaCPF() {
    this.usuariosPesquisados = usuarioDAO.getUsuarioByPesquisa(3, usuario.getCPF());
    try {
        if (!UtilSistemas.isCPF(usuario.getCPF())) {
            usuario.setCPF("");
            throw new Exception("CPF Inválido");
        } else if (!usuariosPesquisados.isEmpty()) {
            usuario = usuarioDAO.getUsuarioByCPF(usuario.getCPF());

            if (usuario.getDepartamentoProjetos() == null) {
                usuario.setDepartamentoProjetos(new DepartamentoProjetos());
            }
            this.senhaAux = usuario.getSenha();
            this.somenteLeitura = true;
            listarPermissoes(usuario.getSeq());
            throw new Exception("CPF Já Cadastrado");
        }
    } catch (Exception e) {
        UtilSistemas.mostrarMensagemAlerta("Atenção!", e.getMessage());
    }
}
/**
 * Metodo que retorna uma lista de departamentos de projeto
 */
public void listarDepartamentoProjetos() {
    dpProjetos = departamentoProjetosDAO.listarDepartamentos();
}

/**
 * metodo verfica se o login esta cadastrado na base de dados
 */
public void validaLogin() {
    String str = usuario.getUserName();
    int idx = str.indexOf(" ");   //- 1 verdadeiro não tem espaço
    Usuario user = usuarioDAO.getUsuarioByLogin(usuario.getUserName());
    try {
        if (idx != -1) {
            throw new Exception("O nome de Usuário não deve conter espaços");
        } else if (usuario.getUserName().length() < 3) {
            throw new Exception("Usuário deve ter no minimo 3 digitos");
        }
        if (user.getUserName() != null) {
            throw new Exception("Usuario ja esta cadastrado");
        }

    } catch (Exception e) {
        usuario.setUserName("");
        UtilSistemas.mostrarMensagemErro("Erro", e.getMessage());
    }

}

/**
 * Método que valida os campos do cadastro
 *
 * @return
 */
public boolean isCamposValidos() {
    List<String> msgs = new ArrayList<String>();

    // cpf
    if (!UtilSistemas.isCPF(usuario.getCPF())) {
        usuario.setCPF("");
        msgs.add("CPF Inválido");
    } else if (!usuariosPesquisados.isEmpty()) {
        //usuario = usuarioDAO.getUsuarioByCPF(usuario.getCPF());
        this.somenteLeitura = true;
        //msgs.add("CPF Já Cadastrado");
    }
    //rg
    if (usuario.getRG().trim().length() < 5) {
        msgs.add("RG inválido");
    }

    // nome
    if (usuario.getNome().trim().length() < 3) {
        msgs.add("Nome inválido");
    }

    // data nasc
    if (usuario.getDataNasc() == null) {
        msgs.add("Data inválida");
    }

    // email
    if (senhaAux.equals("") && !usuario.getEmail().equals(this.confirmaEmail)) {
        msgs.add("Email inválido");
    }

    // email equivalente
    if (senhaAux.equals("") && !usuario.getEmail().equals(this.confirmaEmail)) {
        msgs.add("Email não são equivalentes");
    }

    //login
    String str = usuario.getUserName();
    int idx = str.indexOf(" ");   //- 1 verdadeiro não tem espaço
    Usuario user = usuarioDAO.getUsuarioByLogin(usuario.getUserName());
    if (idx != -1) {
        msgs.add("O nome de Usuário não deve conter espaços");
    }
    if (usuario.getUserName().length() < 3) {
        msgs.add("Usuário deve ter no minimo 3 digitos");
    }

// if(user.getUserName() != null){
// msgs.add(“Usuario ja esta cadastrado”);
// }
if (usuario.getUserName() == null) {
msgs.add(“Usuário Inválido”);
}

    // senha
    if (senhaAux.equals("") && !usuario.getSenha().equals(this.confirmaSenha)) {
        msgs.add("Senha inválida");
    }

    //                        
    if (!msgs.isEmpty()) {
        for (String s : msgs) {
            UtilSistemas.mostrarMensagemErro("Campo obrigatório", s);
        }
    }

    return (msgs.isEmpty());
}

public void pesquisar() {
    this.statusNovo = false;
    this.statusPesquisar = false;
    this.statusSalvar = false;
    this.statusCancelar = false;
    this.usuariosPesquisados = new ArrayList<Usuario>();
    if (!isNovo) {
        usuariosDe = usuarioDAO.listarUsuarios();
        usuariosPara = usuariosDe;
    }
}

/**
 * metodo salva usuario
 *
 * @throws Exception
 */
public void salvar() throws Exception {

    this.statusNovo = false;
    this.statusPesquisar = false;
    this.statusSalvar = true;
    this.statusCancelar = true;

    if (isCamposValidos()) {
        try {

            if (usuario.getSenha().equals("")) {
                usuario.setSenha(senhaAux);
                confirmaSenha = senhaAux;
            }
          
            usuario = usuarioDAO.salvar(usuario);
            if (usuario.getSeq() > 0 && permissoes.size() > 0) {
                permissaoDAO.salvarPermissoes(permissoes, usuario.getSeq(), isNovo);

            }


           if (isNovo) {
               usuariosDe = usuarioDAO.listarUsuarios();
                usuariosPara = usuariosDe;
                RequestContext.getCurrentInstance().execute("PF('dialogPerfil').show()");

           }

            UtilSistemas.mostrarMensagemSucesso("Sucesso", "Usuario Salvo");

        } catch (Exception e) {
            UtilSistemas.mostrarMensagemErro("Erro", e.getMessage());
        }

    }

}

/**
 * Metodo que copia o perfil de permissões
 */
public void copiarPerfil() {

// isNovo = true;
List permissoesAux = new ArrayList();
permissoesAux = permissaoDAO.listarPermissao(usuarioPara);

    for (Permissao p : permissoesAux) {
        deletarPermissao(p.getId());
    }

    permissoes = permissaoDAO.listarPermissao(usuarioDe);

    permissaoDAO.salvarPermissoes(permissoes, usuarioPara, isNovo);
    isNovo = false;

}

public void cancelar() {
    this.statusNovo = false;
    this.statusSalvar = true;
    this.statusPesquisar = false;
    this.statusCancelar = true;
    this.usuariosPesquisados = new ArrayList<Usuario>();
    isNovo = false;

}

/**
 * limpa tela
 */
public void novo() {

    this.usuario = new Usuario();
    this.confirmaEmail = "";
    this.confirmaSenha = "";
    this.usuariosPesquisados = new ArrayList<Usuario>();
    this.permissoes = new ArrayList<Permissao>();

// this.usuario.setDepartamentoProjetos(new DepartamentoProjetos());

    this.isNovo = true;
    this.statusNovo = true;
    this.statusSalvar = false;
    this.statusPesquisar = true;
    this.statusCancelar = false;
    this.somenteLeitura = false;

}
/**
 * metodos retorna lista de usuario pesquisados
 *
 * @param pesquisa
 * @param usuario
 */
public void listarUsuarios() {
  
    usuariosPesquisados = usuarioDAO.getUsuarioByPesquisa(pesquisa, usuarioPesquisa);

}

/**
 * Metodo pra deletar permissão
 *
 * @param idPermissao
 */
public void deletarPermissao(int idPermissao) {
    permissaoDAO.deletarPermissao(idPermissao);
    listarPermissoes(usuario.getSeq());
    //RequestContext.getCurrentInstance().update("formCadastro:dtPermissoes");
}

/**
 * Metodo que retorna usuario pelo CPF
 *
 * @param CPF
 */
public void getUsuarioByCPF(String CPF) {
    usuario = usuarioDAO.getUsuarioByCPF(CPF);
}

/**
 * Metodo que lista empresas
 */
public void listarEmpresas() {
    empresas = empresaDAO.listarEmpresas();
}

/**
 * Metodo que retorna uma lista de programas ativos
 */
public void listarProgramas() {
    programas = programaDAO.listarProgramas();
}

/**
 * Metodo que lista programas pelo id do Sistema
 *
 * @param idSistema
 */
public void listarProgramasSistema(int idSistema) {
    programas = new ArrayList<Programa>();
   
    sistemas = new ArrayList<Sistema>();
    
   
    
    conteudoPesquisa = "";
    programas = programaDAO.listarProgramasByIdSistema(idSistema);
    int i = 0;
    for (Permissao p : permissoes) {

        for (i = 0; i < programas.size(); i++) {
            if (p.getPrograma().getIdPrograma() == programas.get(i).getIdPrograma()) {
                programas.remove(i);
            }
        }

    }

    if (programas.size() < 1) {
        RequestContext.getCurrentInstance().update("formCadastro:dlgSistema");
        UtilSistemas.mostrarMensagemAlerta("Atenção", "Todas as permissões deste sistemas já foram concedida ao usuário.");
        RequestContext.getCurrentInstance().execute("PF('dlgSistema').show();");
    } else {
        RequestContext.getCurrentInstance().execute("PF('dlgSistema').hide();");
        RequestContext.getCurrentInstance().update("formCadastro:dlgProgramas");
        RequestContext.getCurrentInstance().update("formCadastro:dlgSistema");
        RequestContext.getCurrentInstance().execute("PF('dlgProgramas').show();");
    }

}

/**
 * Metodo que adiciona uma nova permissao para usuario
 */
public void adicionarPermissao() {
    List<Programa> programasTemp = new ArrayList<Programa>();

    for (Programa p : programas) {
        if (p.isIsSelected()) {
            programasTemp.add(p);
        }
    }
  
    for (Programa p : programasTemp) {

        Permissao permissao = new Permissao();
        permissao.setIdUsuario(usuario.getSeq());
        permissao.setIsAcessa(true);
        permissao.setIsAltera(true);
        permissao.setIsInsere(true);
        permissao.setPrograma(p);
        permissao.setiUsuario(UtilSistemas.getUsuarioLogado().getSeq());

        permissoes.add(permissao);

    }
    


   
    permissaoDAO.salvarPermissoes(permissoes, usuario.getSeq(), isNovo);

    listarPermissoes(usuario.getSeq());

    RequestContext.getCurrentInstance().execute("PF('dlgProgramas').hide();");
    
    RequestContext.getCurrentInstance().update("formCadastro:pnlPermissao");

    UtilSistemas.mostrarMensagemSucesso("Sucesso!", "Permissão adicionada com sucesso!");

}

/**
 * Metodo que retorna uma lista de Centro de Custo
 */
public void listarCentroCusto() {
    centrosCusto = centroCustoDAO.listarCentroCusto();
}

public Usuario getUsuario() {
    return usuario;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
    this.confirmaEmail = usuario.getEmail();
    this.confirmaSenha = usuario.getSenha();
    this.verificaSenha = usuario.getSenha();
    this.senhaAux = usuario.getSenha();
    this.usuarioPesquisa = "";

    if (usuario.getDepartamentoProjetos() == null) {
        usuario.setDepartamentoProjetos(new DepartamentoProjetos());
    }

    listarPermissoes(usuario.getSeq());
    pesquisar();
}

public List<Permissao> getPermissoes() {
    return permissoes;
}

public void setPermissoes(List<Permissao> permissoes) {
    this.permissoes = permissoes;
}

public List<Programa> getProgramas() {
    return programas;
}

public void setProgramas(List<Programa> programas) {
    this.programas = programas;
}

public List<Empresa> getEmpresas() {
    return empresas;
}

public void setEmpresas(List<Empresa> empresas) {
    this.empresas = empresas;
}

public List<CentroCusto> getCentrosCusto() {
    return centrosCusto;
}

public void setCentrosCusto(List<CentroCusto> centrosCusto) {
    this.centrosCusto = centrosCusto;
}

public int getPesquisa() {
    return pesquisa;
}

public void setPesquisa(int pesquisa) {
    this.pesquisa = pesquisa;
}

public String getUsuarioPesquisa() {
    return usuarioPesquisa;
}

public void setUsuarioPesquisa(String usuarioPesquisa) {
    this.usuarioPesquisa = usuarioPesquisa;
}

public List<Usuario> getUsuariosPesquisados() {
    return usuariosPesquisados;
}

public void setUsuariosPesquisados(List<Usuario> usuariosPesquisados) {
    this.usuariosPesquisados = usuariosPesquisados;
}

public String getVerificaSenha() {
    return verificaSenha;
}

public void setVerificaSenha(String verificaSenha) {
    this.verificaSenha = verificaSenha;
}

public boolean isSomenteLeitura() {
    return somenteLeitura;
}

public void setSomenteLeitura(boolean somenteLeitura) {
    this.somenteLeitura = somenteLeitura;
}

public boolean isPodeSalvar() {
    return podeSalvar;
}

public void setPodeSalvar(boolean podeSalvar) {
    this.podeSalvar = podeSalvar;
}

public String getConfirmaEmail() {
    return confirmaEmail;
}

public void setConfirmaEmail(String confirmaEmail) {
    this.confirmaEmail = confirmaEmail;
}

public String getConfirmaSenha() {
    return confirmaSenha;
}

public void setConfirmaSenha(String confirmaSenha) {
    this.confirmaSenha = confirmaSenha;
}

public boolean isStatusNovo() {
    return statusNovo;
}

public void setStatusNovo(boolean statusNovo) {
    this.statusNovo = statusNovo;
}

public boolean isStatusSalvar() {
    return statusSalvar;
}

public void setStatusSalvar(boolean statusSalvar) {
    this.statusSalvar = statusSalvar;
}

public boolean isStatusPesquisar() {
    return statusPesquisar;
}

public void setStatusPesquisar(boolean statusPesquisar) {
    this.statusPesquisar = statusPesquisar;
}

public boolean isStatusCancelar() {
    return statusCancelar;
}

public void setStatusCancelar(boolean statusCancelar) {
    this.statusCancelar = statusCancelar;
}

public List<Usuario> getUsuariosDe() {
    return usuariosDe;
}

public void setUsuariosDe(List<Usuario> usuariosDe) {
    this.usuariosDe = usuariosDe;
}

public List<Usuario> getUsuariosPara() {
    return usuariosPara;
}

public void setUsuariosPara(List<Usuario> usuariosPara) {
    this.usuariosPara = usuariosPara;
}

public int getUsuarioDe() {
    return usuarioDe;
}

public void setUsuarioDe(int usuarioDe) {
    this.usuarioDe = usuarioDe;
}

public int getUsuarioPara() {
    return usuarioPara;
}

public void setUsuarioPara(int usuarioPara) {
    this.usuarioPara = usuarioPara;
}

public List<Sistema> getSistemas() {
    return sistemas;
}

public void setSistemas(List<Sistema> sistemas) {
    this.sistemas = sistemas;
}

public String getConteudoPesquisa() {
    return conteudoPesquisa;
}

public void setConteudoPesquisa(String conteudoPesquisa) {
    this.conteudoPesquisa = conteudoPesquisa;
}

public boolean isShowDialog() {
    return showDialog;
}

public void setShowDialog(boolean showDialog) {
    this.showDialog = showDialog;
}

public List<DepartamentoProjetos> getDpProjetos() {
    return dpProjetos;
}

public void setDpProjetos(List<DepartamentoProjetos> dpProjetos) {
    this.dpProjetos = dpProjetos;
}

Erro no console
11-Apr-2018 10:02:11.875 SEVERE [http-nio-8084-exec-125] com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError javax.el.PropertyNotFoundException: /restrito/cadUsuario.xhtml @280,129 value="#{usuarioMB.usuario.departamentoProjetos.id}": Target Unreachable, ‘departamentoProjetos’ returned null
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, ‘departamentoProjetos’ returned null

Quando você instancia o managedBean (como é viewscoped, cada vez que carrega a view), você seta o departamentoProjetos do usuario.
Por alguma razão, depois que o método salvar é executado, você tem um novo usuario, mas não seta o departamentoProjetos dele. Daí é que vem a exceção que está recebendo.

Então @darlan_machado (Por alguma razão, depois que o método salvar é executado, você tem um novo usuário, mas não seta o departamentoProjetos dele). Quando eu clico no botão novo do meu form ele cria um novo usuário eu já setei ele nesse método só que quando eu faço isso começa a duplicar os meus registro.

Como assim, duplica registros? Se isso acontece, é por você chamar duas vezes o método que persiste.

Nesse método
public void novo() {

    this.usuario = new Usuario();
    this.confirmaEmail = "";
    this.confirmaSenha = "";
    this.usuariosPesquisados = new ArrayList<Usuario>();
    this.permissoes = new ArrayList<Permissao>();
    this.usuario.setDepartamentoProjetos(new DepartamentoProjetos());
    this.isNovo = true;
    this.statusNovo = true;
    this.statusSalvar = false;
    this.statusPesquisar = true;
    this.statusCancelar = false;
    this.somenteLeitura = false;

}

Quando eu faço assim da certo ele traz os campos naquela imagem de cima mas começa a duplicar os campos em na tabela que eu tenho no form.

Ai essa parte é por você chamar duas vezes o método que persiste eu não consegui identificar a onde estou errado já debuguei mas não estou conseguindo.

@darlan_machado Você pode me dar uma ajuda nessa questão de duplicar os registro já faz uma semana que eu estou tentando resolver isso, estou bem perdido.

Os registros duplicados estão na tabela, apenas?

Não, está no banco também.

O que está ocorrendo é que, por alguma razão, o evento que dispara o método salvar está sendo executado em duplicidade.

Eu não olhei o código, mas os métodos getters e setters podem ser chamado diversas vezes durante o ciclo de vida, um atras do outros.

Da uma checada…

Bom dano um retorno aqui no post depois de quebrar muito a cabeça consegui resolver,tinha uma variável global no código que não esta funcionando de direito, essa variável estava fazendo o seguinte se o registro e novo ele deve ser inserido no banco de dados, eu tirei essa variável e mudei na procedure a rotina e usei pelo id se existir o id ele atualiza se não existir o id ele grava.