[Resolvido]-Atualizar página web + JSF

2 respostas
R

Boa tarde galera, tudo certo? Bem, na minha aplicação estou fazendo as rematrículas automáticas dos alunos de uma turma. Nela, faço o seguinte: tenho uma lista de matrículas (matriculasListSemLazy-> essa lista contém alunos aprovados e reprovados). Bem, em um método estou separando os alunos Aprovados para uma lista e os Reprovados em outra. Os alunos Aprovados serão Rematriculados para uma turma do próximo ano e os Rematriculados a mesma coisa. O método já está funcionando, os alunos já estão sendo separados, só que não estou conseguindo atualizar a tela.
Por exemplo, tenho dois alunos ( um aprovado e outro reprovado). Vou rematriculá-los, escolhi a turma de cada um e executei o método. GEROU A REMATRÍCULA. Porém, se ele clicar em gerar rematrícula novamente, esses alunos são REMATRICULADOS NOVAMENTE. Onde, que, pelo certo, ele deveria “cair” em um validador para ver que as listas não estão vazias e que esses alunos já estão rematriculados. Mas, se após eu gerar a rematrícula para os alunos eu der um F5 na página, ele “cai” no validador e verifica que a lista não está vazia. Abaixo, o xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:treap="http://java.sun.com/jsf/composite/treap"
      xmlns:p="http://primefaces.org/ui">

    <body>
        <ui:composition template="./default_layout_with_menu.xhtml">
            <ui:define name="titulo-pagina">
                Rematrícula Automática
            </ui:define>
            <ui:define name="content">
                <treap:ajaxStatus/>

                <p:growl id="growl2" life="4000"/>
                <p:focus for="escola"/>
                    
                    <p:panel id="dados" header="Dados Principais" >
                        <h:panelGrid columns="3" width="100%">
                            <h:panelGrid columns="2">

                                <p:outputLabel id="ano_label" value="Ano Atual:" for="ano"/> 
                                <h:outputText id="ano" value="#{matriculaJsfBean.ano}"/>

                                <p:outputLabel id="escola_label" value="Escola Atual:" for="escola"/>  
                                <p:selectOneMenu id="escola"  value="#{matriculaJsfBean.escolaRematricula}"  filter="true" required="true" requiredMessage="Selecione a Escola." caseSensitive="false" filterMatchMode="contains">
                                    <f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
                                    <f:selectItems value="#{matriculaJsfBean.escolaList}" var="e" itemLabel="#{e.codigo} - #{e.nome}" itemValue="#{e.codigo}"/>
                                    <p:ajax update="turma novaTurmaA novaTurmaR" event="change" listener="#{matriculaJsfBean.atualizarTurmaPorEscolaSemSessao(event)}"/>
                                </p:selectOneMenu>

                                <p:outputLabel id="turma_label" value="Turma Atual:" for="turma"/>  
                                <p:selectOneMenu id="turma" converter="sec" value="#{matriculaJsfBean.turma}"  filter="true" required="true" requiredMessage="Selecione a Turma." caseSensitive="false" filterMatchMode="contains">
                                    <f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
                                    <f:selectItems value="#{matriculaJsfBean.turmaList}" var="t" itemLabel="#{t.codigo} - #{t.descricao}" itemValue="#{t}"/>
                                </p:selectOneMenu>

                            </h:panelGrid>
                            <h:panelGrid columns="2">

                                <p:outputLabel id="proximoAnoA_label" value="Próximo Ano:" for="proximoAnoA"/> 
                                <h:outputText id="proximoAnoA" value="#{matriculaJsfBean.proximoAno}"/>

                                <p:outputLabel id="novaTurmaA_label" value="Nova Turma Aprovados:" for="novaTurmaA"/>  
                                <p:selectOneMenu id="novaTurmaA"  converter="sec" value="#{matriculaJsfBean.novaTurma}" filter="true" required="true" requiredMessage="Selecione a Turma Destino." caseSensitive="false" filterMatchMode="contains">
                                    <f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
                                    <f:selectItems value="#{matriculaJsfBean.turmaListDestino}"  var="t" itemLabel="#{t.ano} - #{t.descricao}" itemValue="#{t}"/>
                                </p:selectOneMenu>

                            </h:panelGrid>

                            <h:panelGrid columns="2">

                                <p:outputLabel id="proximoAnoR_label" value="Próximo Ano:" for="proximoAnoR"/>                         
                                <h:outputText id="proximoAnoR" value="#{matriculaJsfBean.proximoAno}"/>

                                <p:outputLabel id="novaTurmaR_label" value="Nova Turma Reprovados:" for="novaTurmaR"/>  
                                <p:selectOneMenu id="novaTurmaR"  converter="sec" value="#{matriculaJsfBean.novaTurmaReprovados}" filter="true" required="true" requiredMessage="Selecione a Turma Destino." caseSensitive="false" filterMatchMode="contains">
                                    <f:selectItem itemLabel="Selecione" itemValue="#{null}"/>
                                    <f:selectItems value="#{matriculaJsfBean.turmaListDestino}"  var="tR" itemLabel="#{tR.ano} - #{tR.descricao}" itemValue="#{tR}"/>
                                </p:selectOneMenu>

                            </h:panelGrid>

                        </h:panelGrid>
                        <br/>
                        <p:commandButton id="BtnfiltraMatricula" actionListener="#{matriculaJsfBean.atualizar()}" value="Consultar" update="tabela1 tabela2 tabela3 @form" process="dados @form" image="search"/>
                        <p:commandButton action="#{matriculaJsfBean.geraRematricula()}" value="Gerar Rematrícula" update="@form" image="ok"/>

                        <p:confirmDialog id="confirmDialogA" message="Ultrapassou #{matriculaJsfBean.vagasIndisponiveisTurmaAprovados} das vagas para rematrícula de aprovados. Continuar?" header="Rematrícula Aprovados" severity="alert" widgetVar="vagasTurmaAprovados">
                            <p:commandButton id="confirmA" value="Sim" update="@form" oncomplete="vagasTurmaAprovados.hide()" actionListener="#{matriculaJsfBean.rematAlunos_A_R_novaTurma()}" image="ok"/>
                            <p:commandButton id="declineA" value="Cancelar" onclick="vagasTurma.hide();" image="cancel2"/>
                        </p:confirmDialog>

                        <p:confirmDialog id="confirmDialogR" message=" Ultrapassou #{matriculaJsfBean.vagasIndisponiveisTurmaReprovados} das vagas para rematrícula de reprovados. Continuar?" header="Rematrícula Reprovados" severity="alert" widgetVar="vagasTurmaReprovados">
                            <p:commandButton id="confirmR" value="Sim" update="@form" oncomplete="vagasTurmaReprovados.hide()" actionListener="#{matriculaJsfBean.rematAlunos_A_R_novaTurma()}" image="ok"/>
                            <p:commandButton id="declineR" value="Cancelar" onclick="vagasTurma.hide();" image="cancel2"/>
                        </p:confirmDialog>

                        <p:confirmDialog id="confirmDialogAR" message="Ultrapassou #{matriculaJsfBean.vagasIndisponiveisTurmaAprovados} das vagas para rematrícula de aprovados e #{matriculaJsfBean.vagasIndisponiveisTurmaReprovados} para rematricula de reprovados. Continuar?" header="Rematrícula" severity="alert" widgetVar="vagasTurmaAprovadoReprovado">

                            <p:commandButton id="confirmAR3" value="Sim" update="@form" oncomplete="vagasTurmaAprovadoReprovado.hide()" actionListener="#{matriculaJsfBean.rematAlunos_A_R_novaTurma()}" image="ok"/>
                            <p:commandButton id="declineAR" value="Cancelar" onclick="vagasTurma.hide();" image="cancel2"/>
                        </p:confirmDialog>

                        <br/><br/>
                        <p:dataTable id="tabela1"
                                     value="#{matriculaJsfBean.matriculasListSemLazy}"
                                     var="item"
                                     emptyMessage="Nenhum registro encontrado."
                                     paginator="false"
                                     lazy="false">

                            <f:facet name="header">
                                Rematrículas de Alunos Turma : #{matriculaJsfBean.turma.ano} #{matriculaJsfBean.turma}
                            </f:facet>

                            <p:column headerText="Código" sortBy="#{item.codigo}" style="width:07%">
                                <h:outputText value="#{item.codigo}"/>
                            </p:column>

                            <p:column headerText="Aluno">
                                <h:outputText value="#{item.aluno.nome}"/>
                            </p:column>

                            <p:column headerText="Situação">
                                <h:outputText value="#{item.statusCompleto}"/>
                            </p:column>

                        </p:dataTable>
                        <br/>
                    </p:panel>
                    <br/><br/>

                    <p:panel id="panelTabela">
                        <p:panelGrid columns="2" style="width: 100%">

                            <p:dataTable id="tabela2"
                                         value="#{matriculaJsfBean.rematriculaAprovados}"
                                         var="item"
                                         emptyMessage="Nenhum registro encontrado."
                                         paginator="true"
                                         rows="10"
                                         pageLinks="5"
                                         paginatorPosition="bottom"
                                         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
                                         {PageLinks} {NextPageLink} {LastPageLink} Exibir: {RowsPerPageDropdown}
                                         Encontrados: #{matriculaJsfBean.rematriculaAprovados.size()}"
                                         rowsPerPageTemplate="10,25,35,50"
                                         lazy="false">
                                <f:facet name="header">
                                    Matrícula Alunos Aprovados Turma: #{matriculaJsfBean.novaTurma.ano} #{matriculaJsfBean.novaTurma}
                                </f:facet>

                                <p:column headerText="Código" sortBy="#{item.codigo}" style="width:07%">
                                    <h:outputText value="#{item.codigo}"/>
                                </p:column>

                                <p:column headerText="Aluno">
                                    <h:outputText value="#{item.aluno.nome}"/>
                                </p:column>
                            </p:dataTable>

                            <p:dataTable id="tabela3"
                                         value="#{matriculaJsfBean.rematriculaReprovados}"
                                         var="item"
                                         emptyMessage="Nenhum registro encontrado."
                                         paginator="true"
                                         rows="10"
                                         pageLinks="5"
                                         paginatorPosition="bottom"
                                         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
                                         {PageLinks} {NextPageLink} {LastPageLink} Exibir: {RowsPerPageDropdown}
                                         Encontrados: #{matriculaJsfBean.rematriculaReprovados.size()}"
                                         rowsPerPageTemplate="10,25,35,50"
                                         lazy="false">

                                <f:facet name="header">
                                    Matrícula Alunos Reprovados Turma: #{matriculaJsfBean.novaTurmaReprovados.ano} #{matriculaJsfBean.novaTurmaReprovados}
                                </f:facet>
                                <p:column headerText="Código" sortBy="#{item.codigo}" style="width:07%">
                                    <h:outputText value="#{item.codigo}"/>
                                </p:column>

                                <p:column headerText="Aluno">
                                    <h:outputText value="#{item.aluno.nome}"/>
                                </p:column>
                            </p:dataTable>
                        </p:panelGrid>
                    </p:panel>
            </ui:define>
        </ui:composition>
    </body>
</html>

Na linha 71 que tenho método geraRematrícula. Abaixo o bean:

private Turma novaTurma = new Turma();
    private Turma novaTurmaReprovados = new Turma();
    private Turma turma;
    private List<Matricula> rematriculaAprovados = new ArrayList<Matricula>();  
    private List<Matricula> rematriculaReprovados = new ArrayList<Matricula>();  
    private List<Matricula> matriculasListSemLazy = new ArrayList<Matricula>();
    private List<Matricula> rematriculaAprovadosAuxiliar = new ArrayList<Matricula>();  
    private List<Matricula> rematriculaReprovadosAuxiliar = new ArrayList<Matricula>(); 

  @Override
    public void atualizar() {
  matriculasListSemLazy.clear();
        rematriculaAprovados.clear();
        rematriculaReprovados.clear();
        matriculasListSemLazy = crudService.executeNativeQuery("select * from edu_matriculas m "
                + "inner join edu_escolas e on m.mat_codescola = e.esc_codigo "
                + "inner join edu_turmas t on t.tur_codigo = m.mat_codturma "
                + "where m.mat_codescola = " + escolaRematricula + ""
                + "and m.mat_codturma = " + turma.getCodigo() + "", Matricula.class);
        rematriculaAprovados = crudService.executeNativeQuery("select * from edu_matriculas m "
                + "inner join edu_escolas e on m.mat_codescola = e.esc_codigo "
                + "inner join edu_turmas t on t.tur_codigo = m.mat_codturma "
                + "where m.mat_codescola = " + escolaRematricula + ""
                + "and m.mat_codturma = " + novaTurma.getCodigo() + "", Matricula.class);
        rematriculaReprovados = crudService.executeNativeQuery("select * from edu_matriculas m "
                + "inner join edu_escolas e on m.mat_codescola = e.esc_codigo "
                + "inner join edu_turmas t on t.tur_codigo = m.mat_codturma "
                + "where m.mat_codescola = " + escolaRematricula + ""
                + "and m.mat_codturma = " + novaTurmaReprovados.getCodigo() + "", Matricula.class);
    }

  public void geraRematricula() {

        for (Matricula matricula : matriculasListSemLazy) {
            if (matricula.getStatus().equals("A")) {
                rematriculaAprovadosAuxiliar.add(matricula);
            } else if (matricula.getStatus().equals("R")) {
                rematriculaReprovadosAuxiliar.add(matricula);
            }
        }

        if (rematriculaReprovadosAuxiliar.size() > novaTurmaReprovados.getDisponivel() && rematriculaAprovadosAuxiliar.size() < novaTurma.getDisponivel()) {
            primeFacesExecute("vagasTurmaReprovados.show();");

        } else if (rematriculaAprovadosAuxiliar.size() > novaTurma.getDisponivel() && rematriculaReprovadosAuxiliar.size() < novaTurmaReprovados.getDisponivel()) {
            primeFacesExecute("vagasTurmaAprovados.show();");

        } else if (rematriculaAprovadosAuxiliar.size() > novaTurma.getDisponivel() && rematriculaReprovadosAuxiliar.size() > novaTurmaReprovados.getDisponivel()) {
            primeFacesExecute("vagasTurmaAprovadoReprovado.show();");
        } else {
            rematAlunos_A_novaTurma();
            rematAlunos_R_novaTurma();
        }
        atualizar();
    }

    public void rematAlunos_A_R_novaTurma() {
        rematAlunos_A_novaTurma();
        rematAlunos_R_novaTurma();
        atualizar();
    }

    public void rematAlunos_A_novaTurma() {
        try {
            if (novaTurma != null && !novaTurma.getMatriculaCollection().isEmpty()) {
                Iterator<Matricula> it = rematriculaAprovadosAuxiliar.iterator();
                while (it.hasNext()) {
                    Matricula matParaRematricular = it.next();
                    for (Matricula matNovaTurma : novaTurma.getMatriculaCollection()) {
                        if (matParaRematricular.getAluno().getCodigo().toString().equals(matNovaTurma.getAluno().getCodigo().toString())) {
                            it.remove(); 
                        }
                    }
                }
                for (Matricula novaMatricula : rematriculaAprovadosAuxiliar) {
                    matriculaAlunos(novaMatricula, novaTurma);
                }
                info("Matriculas da turma " + novaTurma.getDescricao() + ", atualizadas");
            } else {
                for (Matricula novaMatricula : rematriculaAprovadosAuxiliar) {
                    matriculaAlunos(novaMatricula, novaTurma);
                }
                info("Alunos rematriculados para a turma " + novaTurma.getDescricao() + ".");
            }

        } catch (Exception exception) {
            fatal("Erro ao gerar as matrículas automáticas");
            fatal(exception.getMessage());
        } finally {
            atualizar();
        }
    }

Meu rematAlunos_R_novaTurma(); faz a mesma coisa que o rematAlunos_A_novaTurma(). Se alguém souber como posso fazer algum tipo de update ou algo similar, ou até mesmo para desabilitar o botão Gera Rematrícula, pois a parte de gerar a rematrícula está funcionando. Além disso, se após eu gerar a rematrícula para os alunos eu der um F5 na página, ele “cai” no validador e verifica que a lista não está vazia…Se alguém puder ajudar, agradeço mto…Vlw

2 Respostas

R

Bem, achei um método que dá um refresh na página inteira, mas não seria bem isso que eu queria…Alguém tem mais alguma idéia do que eu poderia fazer para atualizar a página ??

public void refresh() {
        FacesContext context = FacesContext.getCurrentInstance();
        Application application = context.getApplication();
        ViewHandler viewHandler = application.getViewHandler();
        UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
        context.setViewRoot(viewRoot);
        context.renderResponse();
    }
R

Bom dia galera, alguém poderia dar uma ajuda aí?? Se alguém puder ajudar, agradeço mto…Vlw

Criado 25 de junho de 2013
Ultima resposta 26 de jun. de 2013
Respostas 2
Participantes 1