[Resolvido]A página não está a passar o valor para o ManagedBean

2 respostas
jsfprogramaçãoejbmysqljava
Y

LOG:
Info: Periodo antigo:0
Info: Periodo antigo2:modelo.TbPeriodos[ codigo=0 ]
Warning: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: modelo.TbPeriodos[ codigo=0 ].
Warning: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: modelo.TbPeriodos[ codigo=0 ].

A pagina Web:

<p:fieldset legend="Confirmar Unidades Curriculares ao Aluno">

                                                <p:panel>
                                                    <p:messages id="messagens" closable="true"/>
                                                    <h:panelGrid columns="2" width="70%" cellspacing="3" cellpadding="2" style=" font-family: cursive; alignment-adjust: central; ">                    

                                                        <h:outputLabel value="Aluno" for="aluno"/>
                                                        <h:outputLabel style="font-weight: bold;" id="aluno" value="#{confirmacaoController.confirmacoesModelo.codigoMatricula.codigoAluno.preIncricao.nomeCompleto}"/>


                                                        <h:outputLabel value="Unidade Curricular" for="uc"/>
                                                        <p:selectOneMenu id="uc" value="#{mudancaTurmaHistoricoControllerr.uc}" style=" border-radius:10%;font-weight:700;width:100%"> 
                                                            <f:selectItems value="#{confirmacaoController.listarConfirmacoesCodigoConfirmacao(confirmacaoController.matricula)}"  var="al"
                                                                           itemLabel="#{al.gradeCurricularDisciplina.codigoDisciplina.designacao}" 
                                                                           itemValue="#{al.gradeCurricularDisciplina.codigo}" />
                                                            <p:ajax event="change" update="ta"/>
                                                            <p:ajax event="change" update="pa"/>
                                                        </p:selectOneMenu>

                                                        <h:outputLabel value="Turma Atual" for="ta"/>
                                                        <p:selectOneMenu id="ta" disabled="true"  value="#{mudancaTurmaHistoricoControllerr.turmaAntiga}" style=" border-radius:10%;font-weight:700;width:100%">
                                                            <f:selectItems itemDisabled="true"  value="#{confirmacaoController.listarConfirmacoesCodigoConfirmacaoRedundate(mudancaTurmaHistoricoControllerr.uc)}"  var="turmaAtual"
                                                                           itemLabel="#{turmaAtual.codigoTurma.designacao}"  
                                                                           itemValue="#{turmaAtual.codigoTurma.codigo}" />
                                                        </p:selectOneMenu>

                                                        <h:outputLabel value="Periodo Atual" for="pa"/>
                                                        <p:selectOneMenu id="pa" disabled="true" immediate="true" value="#{mudancaTurmaHistoricoControllerr.periodoAntigo}" style=" border-radius:10%;font-weight:700;width:100%">
                                                            <f:selectItems itemDisabled="true"  value="#{confirmacaoController.listarConfirmacoesCodigoConfirmacaoRedundate(mudancaTurmaHistoricoControllerr.uc)}"  var="periodoAtual"
                                                                           itemLabel="#{periodoAtual.codigoTurma.codigoPeriodo.designacao}"  
                                                                           itemValue="#{periodoAtual.codigoTurma.codigoPeriodo.codigo}"/>
                                                        </p:selectOneMenu>


                                                        <h:outputLabel value="Nova Turma" for="turma"/>
                                                        <p:selectOneMenu id="turma" value="#{mudancaTurmaHistoricoControllerr.turmaNova}" style=" border-radius:10%;font-weight:700;width:100%">
                                                            <f:selectItems value="#{turmaController.listar()}"  var="turma"
                                                                           itemLabel="#{turma.designacao}" 
                                                                           itemValue="#{turma.codigo}" />
                                                            <p:ajax event="change" update="periodo"/>
                                                        </p:selectOneMenu>

                                                        <h:outputLabel value="Novo Periodo" for="periodo"/>
                                                        <p:selectOneMenu id="periodo" value="#{mudancaTurmaHistoricoControllerr.periodoNovo}" style=" border-radius:10%;font-weight:700;width:100%">
                                                            <f:selectItems value="#{turmaController.listarTurmasPorCodigoMesmo(mudancaTurmaHistoricoControllerr.turmaNova)}"  var="periodo"
                                                                           itemLabel="#{periodo.codigoPeriodo.designacao}" 
                                                                           itemValue="#{periodo.codigoPeriodo.codigo}" />
                                                        </p:selectOneMenu>
                                                    </h:panelGrid>

                                                </p:panel>
                                                <p:panel>
                                                    <p:commandButton ajax="false"
                                                                     value="Efetuar Mudança de Turma/Periodo"
                                                                     actionListener="#{mudancaTurmaHistoricoControllerr.novoRegisto()}">
                                                        <f:setPropertyActionListener value="#{loginController.pegarNomeLogado.codigo}" target="#{mudancaTurmaHistoricoControllerr.utilizador}" />
                                                    </p:commandButton>
                                                    <p:commandButton value="Cancelar"
                                                                     type="reset"/>
                                                </p:panel>
                                            </p:fieldset>

O managed Bean:

public void novoRegisto() {

    
    FacesContext facesContext = FacesContext.getCurrentInstance();
  
    
    tbMudancaoTurmaHistorico.setAnoLectivo(new TbAnoLectivo(1));
    tbMudancaoTurmaHistorico.setCodigoAluno(new TbConfirmacoes(alunoPorMatricula(getAluno())));
    System.out.println("Periodo antigo:"+periodoAntigo);
    tbMudancaoTurmaHistorico.setPeriodoAntigo(new TbPeriodos(getPeriodoAntigo()));
    System.out.println("Periodo antigo2:"+tbMudancaoTurmaHistorico.getPeriodoAntigo());
    tbMudancaoTurmaHistorico.setTurmaAntigo(new TbTurmas(getTurmaAntiga()));
    tbMudancaoTurmaHistorico.setTurmaNova(new TbTurmas(getTurmaNova()));
    tbMudancaoTurmaHistorico.setPeriodoNovo(new TbPeriodos(getPeriodoNovo()));
    tbMudancaoTurmaHistorico.setUc(new TbGradeCurricular(getUc()));
    tbMudancaoTurmaHistorico.setDataRegisto(getData().getDataActual());
    tbMudancaoTurmaHistorico.setUtilizador(new TbUtilizadores(getUtilizador()));
    tbMudancaoTurmaHistoricoFacade.create(tbMudancaoTurmaHistorico);
    
    tbComfirmacaoTemp=tbConfirmacoesFacade.find(alunoPorMatricula(getAluno()));        
    tbComfirmacaoTemp.setCodigoTurma(tbMudancaoTurmaHistorico.getTurmaNova());
    tbConfirmacoesFacade.edit(tbComfirmacaoTemp);
    
    facesContext.addMessage(null, new FacesMessage("Dados Registados com sucesso"));
    
}

2 Respostas

L

O JSF possui um ciclo de vida complexo e, por isso, é preciso analisar detalhadamente o processo de submissão dos dados, pois, se ocorrer algum erro em alguma das fases do ciclo de vida, entre a submissão e a recepção dos dados no managed bean, a informação não chegará onde deveria.
Revise seu código, verifique se não há erro de tipos que precisariam de um converter, por exemplo. Isso pode impedir da requisição ser executada a contento.

Y

Obrigado pela atenção, já resolvi o problema. Na verdade o valor não passava para a bean pelo facto de que 2 dos select one acima descrito têm a propriedade disable=“true” e quando assim é o JSF não passa os valores para a bean. Para tal, tive que recuperar os valores a partir do método que preenche os “select one”.

Criado 29 de março de 2017
Ultima resposta 29 de mar. de 2017
Respostas 2
Participantes 2