Atualizar Campos JSF

4 respostas
J

Gostaria de saber como faço para que eu consiga atualizar a tela, ou no caso, somente os componentes que estao na opçao de UPDATE

Tenho a seguinte situaçao, se eu mostrar essa parte

<p:panel id="pnl" header="Finalização Chamado" toggleable="true" closable="true" toggleSpeed="500" closeSpeed="2000" widgetVar="panel" collapsed="true">
                        <h:form id="dinamic12" prependId="true">
                            <f:event type="javax.faces.event.PostAddToViewEvent"
                                     listener="#{finalizarChamadoUsuario.processEvent}" />
                        </h:form>
                    </p:panel>

Não atualiza, chama a função interna, mas nao atualiza, que seria desabilitar e habilitar os dois campos, motivo e avaliaçao, se eu tirar, funciona, mas preciso mostrar isso.

Aqui tem o codigo completo.

<p:layout id="ll_guposp" style="height: 500px; width: 770px">
                <p:layoutUnit position="center" size="100" resizable="true" closable="true" collapsible="true" style="text-align: left">
                    <p:panel id="pnl" header="Finalização Chamado" toggleable="true" closable="true" toggleSpeed="500" closeSpeed="2000" widgetVar="panel" collapsed="true">
                        <h:form id="dinamic12" prependId="true">
                            <f:event type="javax.faces.event.PostAddToViewEvent"
                                     listener="#{finalizarChamadoUsuario.processEvent}" />
                        </h:form>
                    </p:panel>

                    <h:form id="oc">
                        <p:messages id="messages_fnz" showDetail="true" autoUpdate="true"/>
                        <h:panelGrid columns="2" style="text-align: left">
                            <h:outputLabel id="latender" value="Tipo:"/>
                            <p:selectOneMenu id="sOMatender" value="#{finalizarChamadoUsuario.tipo}" height="100" required="true">
                                <f:selectItem itemLabel="Confirmar Solução" itemValue="0" />
                                <f:selectItem itemLabel="Rejeitar Solução" itemValue="1" />
                                <p:ajax update="iavalicao mmtivo"
                                        listener="#{finalizarChamadoUsuario.apresentaAvaliacao()}" />
                            </p:selectOneMenu>

                            <h:outputLabel value="Motivo:"/>
                            <p:inputTextarea rows="7" cols="60" maxlength="200" id="mmtivo"  value="#{finalizarChamadoUsuario.motivo_rejeicao}"
                                             autoResize="false"
                                             disabled="#{finalizarChamadoUsuario.apresentaMotivo}"/>

                            <h:outputText value="Avaliar:" />
                            <p:rating id="iavalicao" value="#{finalizarChamadoUsuario.avaliacao}" stars="10" disabled="#{finalizarChamadoUsuario.apresentarAvaliacao}"/>


                            <p:commandButton value="Gravar" action="#{finalizarChamadoUsuario.gravarFinalizacao()}"
                                             icon="ui-icon-disk"
                                             onclick="chamados"/>

                            <p:commandButton value="Cancelar" action="#{meusChamadosUsuario.AtualizarTabelas()}"
                                             icon="ui-icon-circle-close"
                                             onclick="history.back(1)"/>
                        </h:panelGrid>
                    </h:form>
                </p:layoutUnit>
            </p:layout>

Se alguem tiver alguma ideia. Obrigado!!!

4 Respostas

E

Para atualizar,coloque no commandButton update:"id do que quer atualizar"

Para esconder,mostrar um campo, use rendered.

C

Desculpe mas não entendi o que depende para voce mostrar ou enconder os campos

depende de uma ação do usuario, se ele secionar ou aquilo, mostra esconde

bom se for isso, coloque no componente que ira sofrer a acao e a partir dele esconder e mostrar os outros as opçoes

process="@this" update="componente que voce quer que sejam atualizado"
S

CristianPalmaSola10:
Desculpe mas não entendi o que depende para voce mostrar ou enconder os campos

depende de uma ação do usuario, se ele secionar ou aquilo, mostra esconde

bom se for isso, coloque no componente que ira sofrer a acao e a partir dele esconder e mostrar os outros as opçoes

process="@this" update="componente que voce quer que sejam atualizado"


Também não intendi, desabilitar e habilitar quando? Seja mais especifico, tipo quando clicar no botão tal ou quando fizer tal coisa.
Já tentou usar rerender (ou render se for JSF 2.0) na sua ação ou chamada?
Já tentou tirar os () dos seus menage beans meusChamadosUsuario.AtualizarTabelas() e finalizarChamadoUsuario.gravarFinalizacao()?

J

Desculpa ai pessoal, acabei escrevendo sem muito tempo.

O que eu tenho hoje é a seguinte situação:

&lt;p:selectOneMenu id="sOMatender" value="#{finalizarChamadoUsuario.tipo}" height="100" required="true"&gt;
                                &lt;f:selectItem itemLabel="Confirmar Solução" itemValue="0" /&gt;
                                &lt;f:selectItem itemLabel="Rejeitar Solução" itemValue="1" /&gt;
                                &lt;p:ajax update="iavalicao,mmtivo"
                                        listener="#{finalizarChamadoUsuario.apresentaAvaliacao()}" /&gt;
                            &lt;/p:selectOneMenu&gt;

Messe OneMenu, tem duas opções: CONFIRMAR e REJEITAR, quando clicado em uma das opções, dispara para a classe, onde executa uma função muito simples, somente analisa o que foi feito e diz o que vai ser escondido ou nao, que no caso é: Confirmar: Desabilita o Motivo; Rejeitar: Habilita o Motivo

public void apresentaAvaliacao() {
        if (tipo == 0) {
            apresentarAvaliacao = false;
            apresentaMotivo = true;
        } else {
            apresentarAvaliacao = true;
            apresentaMotivo = false;
        }
    }

Porém quando uso a opçao para mostrar dinamicamente com o processEvent, nao atualiza os campos, chega a ir ate a classe e fazer a verificaçao, alimentar as variaveis, mas nao atualiza.

que seria mais ou menos isso a minha processEvent:

@Override
    public void processEvent(ComponentSystemEvent cse) throws AbortProcessingException {
        HtmlPanelGrid panel = new HtmlPanelGrid();
        HtmlPanelGrid panelUm = new HtmlPanelGrid();
        HtmlForm form = (HtmlForm) cse.getComponent();

        Funcoes func = new Funcoes();

        try {
            rs = Conexao.Consulta("select hac.id, gu.nome, cast(hac.data_hora as date) as data, cast(hac.data_hora as time) as hora, "
                    + "case when hac.status = 'P' then 'Pendente' "
                    + "     when hac.status = 'C' then 'Cancelado' "
                    + "     when hac.status = 'A' then 'Aguardando Retorno' "
                    + "     when hac.status = 'F' then 'Finalizado' "
                    + "     when hac.status = 'I' then 'Inicializado' "
                    + "     when hac.status = 'R' then 'Rejeitado Usuário' "
                    + "end as status, "
                    + "hpc.assunto, hpc.problema, coalesce(hpc.solucao,'') as solucao, coalesce(hac.motivo_rejeicao,'') as motivo_rejeicao, "
                    + "case when coalesce(trim(gu.correio_eletronico),null) is null and coalesce(trim(super.correio_eletronico),null) is null then 'Sem e-mail' "
                    + "	 when gu.correio_eletronico is not null then gu.correio_eletronico "
                    + "  when super.correio_eletronico is not null then super.correio_eletronico "
                    + "end as correio_eletronico "
                    + "from help_abertura_chamado hac "
                    + "join geral_usuarios gu on gu.cod_usuario = hac.id_usuario "
                    + "join help_problema_chamados hpc on hpc.id_chamado = hac.id "
                    + "left join geral_usuarios super on super.cod_usuario = gu.supervisor "
                    + "where hac.id = " + idChamado.toString());

        } catch (SQLException ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao carregar problema", ex.getMessage()));
        }
        try {
            DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
            while (rs.next()) {
                panel.getChildren().add(func.CriaLabel("Usuário:", "lusuario", true, false));
                panel.getChildren().add(func.CriaLabel(rs.getString("nome"), "usuario", false, false));

                panel.getChildren().add(func.CriaLabel("E-mail:", "lemail", true, false));
                panel.getChildren().add(func.CriaLabel(rs.getString("correio_eletronico"), "email", false, false));

                String dt = fmt.format(rs.getDate("data"));

                panel.getChildren().add(func.CriaLabel("Data:", "ldata", true, false));
                panel.getChildren().add(func.CriaLabel(dt, "data", false, false));

                panel.getChildren().add(func.CriaLabel("Hora:", "lhora", true, false));
                panel.getChildren().add(func.CriaLabel(rs.getString("hora"), "hora", false, false));

                panel.getChildren().add(func.CriaLabel("Status:", "lstatus", true, false));
                panel.getChildren().add(func.CriaLabel(rs.getString("status"), "status", false, false));

                panel.getChildren().add(func.CriaLabel("Assunto:", "lassunto", true, false));
                panel.getChildren().add(func.CriaLabel(rs.getString("assunto"), "assunto", false, false));

                panel.getChildren().add(func.CriaLabel("Problema:", "lproblema", true, false));
                panel.getChildren().add(func.CriaLabel(rs.getString("problema"), "problema", false, false));

                panel.getChildren().add(func.CriaLabel("Solução:", "lsolucao", true, true));
                panel.getChildren().add(func.CriaLabel(rs.getString("solucao"), "solucao", false, false));


                if (!rs.getString("motivo_rejeicao").equals("")) {
                    panel.getChildren().add(func.CriaLabel("Motivo Rejeição:", "lrejeicao", true, false));
                    panel.getChildren().add(func.CriaLabel(rs.getString("motivo_rejeicao"), "rejeicao", false, false));
                }

            }
        } catch (SQLException ex) {
            Logger.getLogger(FinalizarChamadoUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            rs = Conexao.Consulta("select hcu.id, cast(hcu.data_hora as date) as hora, cast(hcu.data_hora as time) as hora, "
                    + "hcu.pergunta, coalesce(ht.descricao,'') as terceiro, "
                    + "case when hcu.resposta is null then 'Aguardando Resposta...' else hcu.resposta end as resposta "
                    + "from help_conversa_usuario hcu "
                    + "left join help_terceiros ht on ht.id = hcu.id_terceiro "
                    + "where hcu.id_chamado = " + idChamado.toString());
        } catch (SQLException ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao carregar problema - conversa", ex.getMessage()));
        }


        panel.setColumns(2);
        List&lt;UIComponent&gt; children = form.getChildren();
        children.add(panel);
        children.add(func.CriaSeparador("sep_primeiro"));

        panelUm.setColumns(1);
        Integer i = 0;
        try {
            while (rs.next()) {
                if (!rs.getString("terceiro").equals("")) {
                    panelUm.getChildren().add(func.CriaLabel("Suporte - Terceiro: " + rs.getString("terceiro"), "lsup" + i.toString(), true, false));
                } else {
                    panelUm.getChildren().add(func.CriaLabel("Suporte", "lsup" + i.toString(), true, false));
                }
                panelUm.getChildren().add(func.CriaLabel(rs.getString("pergunta"), "perg" + i.toString(), false, false));

                panelUm.getChildren().add(func.CriaLabel("Usuário", "lusu" + i.toString(), true, false));
                panelUm.getChildren().add(func.CriaLabel(rs.getString("resposta"), "resp" + i.toString(), false, false));

                children.add(panelUm);
                children.add(func.CriaSeparador("sep" + i.toString()));
                i = i + 1;
            }
        } catch (SQLException ex) {
            Logger.getLogger(FinalizarChamadoUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Onde cria os labels conforme a situaçao, enfim, dinamicamente.

Quando tiro essa opçao da minha tela:

&lt;p:panel id="pnl" header="Finalização Chamado" toggleable="true" closable="true" toggleSpeed="500" closeSpeed="2000" widgetVar="panel" collapsed="true"&gt;
                        &lt;h:form id="dinamic12" prependId="true"&gt;
                            &lt;f:event type="javax.faces.event.PostAddToViewEvent"
                                     listener="#{finalizarChamadoUsuario.processEvent}" /&gt;
                        &lt;/h:form&gt;
                    &lt;/p:panel&gt;

ai funciona a questao do meu OneMenu, esconde e mostra o conforme a seleçao.

Nao sei se consegui ser mais claro agora, espero que sim

Obrigado ai pessoal!!

Criado 25 de julho de 2012
Ultima resposta 25 de jul. de 2012
Respostas 4
Participantes 4