[RESOLVIDO] PrimeFaces - Passagem de parâmetros com atualização de componente

6 respostas
R

Olá, pessoal.

Estou me matando aqui com esse problema ridículo, que nunca tive com ICEfaces. Já procurei mto mesmo, e nada.
Organizei a pergunta para ficar mais fácil de entender:

Objetivo: passar um parâmetro para o controle e atualizar os atributos do modelo na página com ajax.

Em detalhes: há um botão em cada linha de uma que deve enviar um atributo do modelo para o controle através da tag . Esse botão deveria atualizar um , que contém os atributos do modelo.

Situação atual: já consegui passar o parâmetro, porém o não é atualizado. Isso só fica possível quando incluo ajax="false".

> Botão que fica em cada linha da tabela:
<p:commandButton value="Atualizar bean" action="#{emailControle.exibeModelo}" update="paramPanel">
     <f:param name="exibir" value="#{item.codigo}"/>
</p:commandButton>
> Painel a ser atualizado
<p:outputPanel id="paramPanel">
     <h:outputText value="#{email.codigo}"/><br/>                                                            
     <h:outputText value="#{email.email}"/>                                                    
</p:outputPanel>
> Controle
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import java.io.Serializable;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class EmailControle implements Serializable {

    private Email email = new Email();
    private String testeParam;
    
    public Email getEmail() {
        return email;
    }

    public void setEmail(Email email) {
        this.email = email;
    }

    public ArrayList<Email> getTodos() {
        ArrayList emails = new ArrayList<Email>();

        emails.add(new Email(1, "E-mail 1", true, true, true));
        emails.add(new Email(2, "E-mail 2", true, false, false));
        emails.add(new Email(3, "E-mail 3", true, false, true));
        emails.add(new Email(4, "E-mail 4", true, false, false));
        emails.add(new Email(5, "E-mail 5", true, true, true));
        emails.add(new Email(6, "E-mail 6", true, false, false));
        emails.add(new Email(7, "E-mail 7", true, false, true));

        return emails;
    }

    public void exibeModelo() {
        testeParam = FacesUtil.getParameter("exibir"); // Recupera o parâmetro lançado da página web.
        int codigo = Integer.parseInt(testeParam); // Código (ID) do bean

        // Encontra o e-mail cujo código é igual ao que foi passado por parâmetro
        for (Email e : getTodos()) {
            if (codigo == e.getCodigo()) {
                email = e;
                break;
            }
        }
        FacesUtil.put(email); // Atualiza o objeto da sessão
    }
}

Obrigado, desde já!

Abraços

6 Respostas

nel

Boa tarde!

Jogue a propriedade “ajax = false” no seu button e se não funcionar tente colocar no update assim : “seuForm:id”.
Veja se ajuda.

Abraços.

Polverini

paramPanel está dentro de outro form ?

R

tudo dentro de um único form.

R

esqueci de mudar o nome…
eu tinha testado com <f:setPropertyActionListener/>, mas tbm não tive sucesso.

Polverini

tenta colocar update=“NomeDoForm:paramPanel”, que eu saiba quando vc deixa como ajax=false ele submete a pagina completa certo ?

R

Funcionou perfeitamente!!!

<h:form id="form">

E no commandButton:
update=“form:paramPanel”

Muito obrigado a todos por essa ajuda mto rápida!

Abraços

Criado 18 de março de 2011
Ultima resposta 18 de mar. de 2011
Respostas 6
Participantes 3