@papaulo escreveu:
Boa tarde galera.
Estou trabalhando com CDI, JSF, PrimeFaces, Hibernate e PostGRE. Tenho um selectonemenu dinâmico (programaPosGraduacao), que é preenchido a partir do valor de um selectonebutton (modalidadeCurso). Porém, quando eu escolho uma opção desse selectonemenu e aperto em "salvar", ele não passa na validação. Li que poderia ser algo relacionado ao Converter ou ao método Equals, mas depois de muito pesquisar não consegui achar a solução ideal. Por favor, me ajudem !
NovaLinhaDePesquisa.xhtml
<!DOCTYPE html> <ui:composition template="/WEB-INF/template/LayoutAluno.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"> <f:metadata> <o:viewParam name="id" value="#{cadastroLinhaPesquisaBean.linhaPesquisa}"/> <f:viewAction action="#{cadastroLinhaPesquisaBean.processar}"></f:viewAction> </f:metadata> <ui:define name="titulo">Nova Linha de Pesquisa - Fichas Catalográficas</ui:define> <ui:define name="pre-texto"> Esta página tem como objetivo cadastrar novas linhas de pesquisa que não se encontram no sistema. <br /> Certifique-se de que a linha de pesquisa realmente não está cadastrado para o programa de pós graduação escolhida. Caso contrário, o registro será duplicado. <br /> </ui:define> <ui:define name="formulario"> <h1>Cadastro de nova linha de pesquisa para programas de pós graduação</h1> <h:form id="frm" role="form" class="form-horizontal"> <h:messages showDetail="false" showSummary="true" autoUpdate="true" errorStyle="color: red;" infoStyle="color: green;" warnStyle="color: orange;" fatalStyle="color: grey;"/> <div class="wizard-header"> </div> <div class="wizard-content"> <div class="form-group"> <h:outputLabel value="Modalidade do curso:* " for="modalidade" styleClass="col-sm-3 control-label" /> <p:selectOneButton id="modalidade" value="#{cadastroLinhaPesquisaBean.linhaPesquisa.programaPosGraduacao.modalidadeCurso}"> <p:ajax event="change" update="programasPosGraduacao" process="@this" listener="#{cadastroLinhaPesquisaBean.modalidadeCursoAlterado}" /> <f:selectItems value="#{cadastroLinhaPesquisaBean.modalidadeCurso}" var="modalidadeCurso" itemLabel="#{modalidadeCurso.descricao}" itemValue="#{modalidadeCurso}" /> </p:selectOneButton> </div> <div class="form-group"> <h:outputLabel value="Programa de pós graduação:* " for="programasPosGraduacao" styleClass="col-sm-3 control-label" /> <div class= "col-sm-9"> <h:selectOneMenu id="programasPosGraduacao" value="#{cadastroLinhaPesquisaBean.linhaPesquisa.programaPosGraduacao}" class="form-control"> <f:selectItem noSelectionOption="true" itemLabel="Selecione a modalidade do curso" itemValue="" /> <f:selectItems value="#{cadastroLinhaPesquisaBean.todosProgramas}" var="programas" itemLabel="#{programas.programa}" itemValue="#{programas.id}"/> </h:selectOneMenu> </div> </div> <div class="form-group"> <h:outputLabel value="Nova linha de pesquisa:* " for="linhaDePesquisa" styleClass="col-sm-3 control-label" /> <div class="col-sm-9"> <h:inputText value="#{cadastroLinhaPesquisaBean.linhaPesquisa.linhaPesquisa}" id="linhaDePesquisa" styleClass="form-control small-lg" /> </div> </div> <div class="form-group"> <div class="col-sm-3" /> <div class="col-sm-9"> <p:commandButton action="#{cadastroLinhaPesquisaBean.salvar}" update="@form" value="Cadastrar" styleClass="wizard-finish btn btn-primary" /> </div> </div> </div> </h:form> </ui:define> </ui:composition> </code> CadastroLinhaPesquisaBean.java <code> package com.ufop.fichas.bean; import java.io.Serializable; import java.util.List; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.event.AjaxBehaviorEvent; import javax.inject.Inject; import javax.inject.Named; import org.omnifaces.cdi.ViewScoped; import com.ufop.fichas.enumerator.ModalidadeCurso; import com.ufop.fichas.model.LinhaDePesquisa; import com.ufop.fichas.model.ProgramaPosGraduacao; import com.ufop.fichas.repository.ProgramaPosGraduacaoRepository; import com.ufop.fichas.service.CadastroLinhaDePesquisa; import com.ufop.fichas.service.NegocioException; @Named @ViewScoped public class CadastroLinhaPesquisaBean implements Serializable { private static final long serialVersionUID = 1L; @Inject private CadastroLinhaDePesquisa cadastro; @Inject private ProgramaPosGraduacaoRepository programaRepository; private List<ProgramaPosGraduacao> todosProgramas; private LinhaDePesquisa linhaPesquisa = new LinhaDePesquisa(); public void processar() { if (this.linhaPesquisa == null) { this.linhaPesquisa = new LinhaDePesquisa(); this.linhaPesquisa.setProgramaPosGraduacao(new ProgramaPosGraduacao()); } } public void salvar() { FacesContext context = FacesContext.getCurrentInstance(); try { this.cadastro.salvar(linhaPesquisa); this.linhaPesquisa = new LinhaDePesquisa(); this.linhaPesquisa.setProgramaPosGraduacao(new ProgramaPosGraduacao()); context.addMessage(null, new FacesMessage("Programa de Pós Graduação cadastrado com sucesso !")); } catch (NegocioException e) { FacesMessage message = new FacesMessage(e.getMessage()); message.setSeverity(FacesMessage.SEVERITY_ERROR); context.addMessage(null, message); } } public List<ProgramaPosGraduacao> getTodosProgramas() { return this.todosProgramas; } public LinhaDePesquisa getLinhaPesquisa() { return linhaPesquisa; } public void setlinhaPesquisa(LinhaDePesquisa linhaPesquisa) { this.linhaPesquisa = linhaPesquisa; } public ProgramaPosGraduacao getProgramaPosGraduacao() { return this.linhaPesquisa.getProgramaPosGraduacao(); } public void setProgramaPosGraduacao(ProgramaPosGraduacao programaPosGraduacao) { this.linhaPesquisa.setProgramaPosGraduacao(programaPosGraduacao); } public ModalidadeCurso[] getModalidadeCurso() { return ModalidadeCurso.values(); } public void modalidadeCursoAlterado(AjaxBehaviorEvent event) { this.todosProgramas = programaRepository.byModalidade(this.getLinhaPesquisa().getProgramaPosGraduacao().getModalidadeCurso()); } } </code> ProgramaPosGraduacaoConverter.java <code> package com.ufop.fichas.converter; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.FacesConverter; import javax.inject.Inject; import com.ufop.fichas.model.ProgramaPosGraduacao; import com.ufop.fichas.repository.ProgramaPosGraduacaoRepository; @FacesConverter(forClass = ProgramaPosGraduacao.class) public class ProgramaPosGraduacaoConverter implements Converter { @Inject private ProgramaPosGraduacaoRepository programaPosGraduacao; @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { if(value != null && !"".equals(value)) { return this.programaPosGraduacao.byId(new Long(value)); } return null; } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { if (value != null) { ProgramaPosGraduacao programa = ((ProgramaPosGraduacao) value); return programa.getId() == null ? null : programa.getId().toString(); } return null; } } </code> ProgramaPosGraduacao.java <code> package com.ufop.fichas.model; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import com.ufop.fichas.enumerator.ModalidadeCurso; import com.ufop.fichas.validation.NotNullOrEmpty; @Entity @Table(name = "programaPosGraduacao") public class ProgramaPosGraduacao implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String programa; private ModalidadeCurso modalidade; @Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @NotNullOrEmpty @Size(max = 255, message = "Programa excede o tamanho permitido") @Column(length = 80, nullable = false) public String getPrograma() { return programa; } public void setPrograma(String programa) { this.programa = programa; } @NotNull @Enumerated(EnumType.STRING) @Column(nullable = false) public ModalidadeCurso getModalidadeCurso() { return modalidade; } public void setModalidadeCurso(ModalidadeCurso modalidade) { this.modalidade = modalidade; } @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; if (obj instanceof ProgramaPosGraduacao) { ProgramaPosGraduacao other = (ProgramaPosGraduacao) obj; return id == other.id && programa == other.programa && modalidade == other.modalidade; } return false; } }
Alguém saberia como me ajudar a resolver esse problema?
Mensagens: 1
Participantes: 1