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 <p:dataTable> que deve enviar um atributo do modelo para o controle através da tag <f:param>. Esse botão deveria atualizar um <p:outputPanel>, que contém os atributos do modelo.
Situação atual: já consegui passar o parâmetro, porém o <p:outputPanel> 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
[code]
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
}
}[/code]
Obrigado, desde já!
Abraços