1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Campo SelectOneMenu(Primefaces) não persiste

Venho pedir a ajuda de vocês novamente, pois preciso terminar meu TCC. Eu tenho um dialog que possui vários campos, um deles é um <p:selectOneMenu>. Quando preeencho todos os campos e vou salvar, os campos são todos salvos, menos o campo <p:selectOneMenu>. E não aparece nenhum erro no stacktrace. Já debuguei, pesquisei sobre Converter e outras mil coisas...e nada de solucionar. Como vou salvar um objeto monografia, atribuo os objetos aluno, professor, linhaPesquisa para o objeto monografia. Todos salvam menos o linhaPesquisa que é uma List e não é mostrada no datatable

Meu <p:selectOneMenu>

<p:outputLabel value="Linha de Pesquisa: " for="linhaPesquisa" />
            <p:selectOneMenu id="linhaPesquisa" converter="#{gestaoMonografiasBean.linhaPesquisaConverter}"
                value="#{gestaoMonografiasBean.monografia.linhaPesquisa}" required="true" >
                <f:selectItem itemLabel="Selecione..." />
                <f:selectItems value="#{gestaoMonografiasBean.selecionarLinhaPesquisa}"
                    var="linhaPesquisa" itemLabel="#{linhaPesquisa.titulo}"
                    itemValue="#{linhaPesquisa}" />
            </p:selectOneMenu>

Meu método selecionarLinhaPesquisa que fica no meu bean, que uso para acessar o repositório de Linha de Pesquisa, depois de buscar passo a lista para o Converter

public List<LinhaPesquisa> getSelecionarLinhaPesquisa() {
        List<LinhaPesquisa> listaLinhaPesquisas = linhaPesquisas.todas();

        linhaPesquisaConverter = new LinhaPesquisaConverter(listaLinhaPesquisas);

        return listaLinhaPesquisas;
    }

Meu método que faz a busca no banco

public List<LinhaPesquisa> todas() {
        return manager.createQuery("from LinhaPesquisa", LinhaPesquisa.class).getResultList();
   }

Meu Converter, que acho que está funcionando normal, pois debuguei e vi que chega no método getAsObject o id referente a Linha de Pesquisa selecionada, porém não salva no banco.

public class LinhaPesquisaConverter implements Converter {

    private List<LinhaPesquisa> listaLinhaPesquisas;



    public LinhaPesquisaConverter(List<LinhaPesquisa> listaLinhaPesquisas) {
        this.listaLinhaPesquisas = listaLinhaPesquisas;
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        System.out.println("Objeto linha pesquisa: " + value);
        if (value == null || value.isEmpty()) {
            throw new ConverterException("Erro de Conversão: value null ou vazio");

        }

         Long id = Long.valueOf(value);

         for(LinhaPesquisa linhaPesquisa: listaLinhaPesquisas){
         if(id.equals(linhaPesquisa.getId())){ 
             return linhaPesquisa; 
            } 
         }

         return null;

    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        System.out.println("Strinh linha de pesquisa: "+value);

        if(value == null){
            return "";
        }

        try{
            if(value instanceof LinhaPesquisa && value != null){

                return String.valueOf(((LinhaPesquisa) value).getId());
            }else{

            }
        }catch(NumberFormatException e){
            throw new ConverterException(new FacesMessage(String.format("Selecione uma Linha de Pesquisa", value)), e);
        }
        return null;

    }

}
public List<LinhaPesquisa> getSelecionarLinhaPesquisa() {
        List<LinhaPesquisa> listaLinhaPesquisas = linhaPesquisas.todas();

        linhaPesquisaConverter = new LinhaPesquisaConverter(listaLinhaPesquisas);

        return listaLinhaPesquisas;
    }

O método todas() no repositório linhasPesquisas

public List<LinhaPesquisa> todas() {
        return manager.createQuery("from LinhaPesquisa", LinhaPesquisa.class).getResultList();
   }

O bean GestaoMonografiasBean completo

@Named
@ViewScoped
public class GestaoMonografiasBean implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    private Monografias monografias;

    @Inject
    private FacesMessages messages;

    @Inject
    private Professores professores;

    @Inject
    private Alunos alunos;

    @Inject
    private LinhaPesquisas linhaPesquisas;

    @Inject
    private CadastroMonografiaService cadastroMonografiaService;

    private List<Monografia> listaMonografias;

    private List<LinhaPesquisa> listaLinhaPesquisas;

    private String termoPesquisa;

    private Converter professorConverter;

    private Converter alunoConverter;

    private Converter linhaPesquisaConverter;

    private Monografia monografia;

    private Aluno aluno;

    private Professor professor;



    @PostConstruct
    private void iniciar() {
        monografia = new Monografia();

        aluno = new Aluno();
        this.aluno.setPessoa(new Pessoa());

        professor = new Professor();
        this.professor.setPessoa(new Pessoa());

        listaLinhaPesquisas = linhaPesquisas.todas();


    }

    public void prepararNovaMonografia() {

    }

    public void prepararEdicao() {
        professorConverter = new ProfessorConverter(Arrays.asList(monografia.getProfessor()));
        alunoConverter = new AlunoConverter(Arrays.asList(monografia.getAluno()));
    }

    public void salvar() {

        try {
            cadastroMonografiaService.salvar(monografia);

            atualizarRegistros();

            messages.info("Monografia salva com sucesso!");

            RequestContext.getCurrentInstance().update(Arrays.asList("frm:monografiasDataTable", "frm:messages"));

        } catch (Exception erro) {
            erro.printStackTrace();
        }
    }

    public void excluir() {
        cadastroMonografiaService.excluir(monografia);

        monografia = null;

        atualizarRegistros();

        messages.info("Monografia excluída com sucesso!");
    }

    public void pesquisar() {
        listaMonografias = monografias.pesquisar(termoPesquisa);

        if (listaMonografias.isEmpty()) {
            messages.info("Sua consulta não retornou registros.");
        }
    }

    public void todasMonografias() {
        listaMonografias = monografias.todas();
    }

    public List<Professor> completarProfessor(String termo) {
        List<Professor> listaProfessores = professores.pesquisar(termo);

        professorConverter = new ProfessorConverter(listaProfessores);

        return listaProfessores;
    }

    public List<Aluno> completarAluno(String termo) {
        List<Aluno> listaAlunos = alunos.pesquisar(termo);

        alunoConverter = new AlunoConverter(listaAlunos);

        return listaAlunos;
    }

    public List<LinhaPesquisa> getSelecionarLinhaPesquisa() {
        List<LinhaPesquisa> listaLinhaPesquisas = linhaPesquisas.todas();

        linhaPesquisaConverter = new LinhaPesquisaConverter(listaLinhaPesquisas);

        return listaLinhaPesquisas;
    }

    private void atualizarRegistros() {
        if (jaHouvePesquisa()) {
            pesquisar();
        } else {
            todasMonografias();
        }
    }

    private boolean jaHouvePesquisa() {
        return termoPesquisa != null && !"".equals(termoPesquisa);
    }

    public List<Monografia> getListaMonografias() {
        return listaMonografias;
    }

    public List<LinhaPesquisa> getListaLinhaPesquisas() {
        return listaLinhaPesquisas;
    }

    public void setListaLinhaPesquisas(List<LinhaPesquisa> listaLinhaPesquisas) {
        this.listaLinhaPesquisas = listaLinhaPesquisas;
    }

    public String getTermoPesquisa() {
        return termoPesquisa;
    }

    public void setTermoPesquisa(String termoPesquisa) {
        this.termoPesquisa = termoPesquisa;
    }

    public Converter getProfessorConverter() {
        return professorConverter;
    }

    public void setProfessorConverter(Converter professorConverter) {
        this.professorConverter = professorConverter;
    }

    public Converter getAlunoConverter() {
        return alunoConverter;
    }

    public void setAlunoConverter(Converter alunoConverter) {
        this.alunoConverter = alunoConverter;
    }

    public Converter getLinhaPesquisaConverter() {
        return linhaPesquisaConverter;
    }

    public void setLinhaPesquisaConverter(Converter linhaPesquisaConverter) {
        this.linhaPesquisaConverter = linhaPesquisaConverter;
    }

    public Monografia getMonografia() {
        return monografia;
    }

    public void setMonografia(Monografia monografia) {
        this.monografia = monografia;
    }

    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
    }

    public boolean isMonografiaSeleciona() {
        return monografia != null && monografia.getId() != null;
    }
}

A classe Monografia que faz o relacionamento ManytoMany com a classe LinhaPesquisa



@Entity
@Table(name="monografia")
public class Monografia implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotEmpty
    @Column(nullable = false, length = 120)
    private String titulo;

    @NotNull
    @Past
    @Temporal(TemporalType.DATE)
    @Column(name = "data_inicio")
    private Date dataInicio;


    @NotNull
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "aluno_id")
    private Aluno aluno;

    @NotNull
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "professor_id")
    private Professor professor;

    @ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinTable(name="monografia_linhapesquisa", joinColumns=
    {@JoinColumn(name="monografia_id")}, inverseJoinColumns=
    {@JoinColumn(name="linha_pesquisa_id")})
    private List<LinhaPesquisa> listaLinhaPesquisas; 

    @Transient
    private LinhaPesquisa linhaPesquisa;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }


    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public List<LinhaPesquisa> getLinhaPesquisas() {
        return listaLinhaPesquisas;
    }

    public void setLinhaPesquisas(List<LinhaPesquisa> linhaPesquisas) {
        this.listaLinhaPesquisas = linhaPesquisas;
    }

    public Aluno getAluno() {
        return aluno;
    }

    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
    }

    public Professor getProfessor() {
        return professor;
    }

    public void setProfessor(Professor professor) {
        this.professor = professor;
    }

    public LinhaPesquisa getLinhaPesquisa() {
        return linhaPesquisa;
    }

    public void setLinhaPesquisa(LinhaPesquisa linhaPesquisa) {
        this.linhaPesquisa = linhaPesquisa;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Monografia other = (Monografia) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Monografia [id=" + id + "]";
    }
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags jsf java jpa ou faça a sua própria pergunta.