Seguinte pessoal, tô com um problema no mínimo curioso.
Para constar, estou usando JSF2.0 com Primefaces 2.2
Tenho um projeto utilizando Primefaces e várias das minhas telas de cadastro utilizam-se de uma DataTable para exibição dos dados. Cada linha dessa tabela possui um botão (commandLink) para Editar aquele valor específico.
Ao clicar nesse botão eu abro um Dialog com as informações daquele objeto.
Meu dialog possui verificação, por exemplo, se o usuário deixa de entrar com um determinado dado, ele vai exibir uma mensagem de erro dizendo que aquele campo é obrigatório e tal. Caso contrário o dialog é fechado, minha tabela atualizada e eu posso novamente editar outro valor que eu quiser.
Atualizei meu projeto para o Primefaces 2.2.1 e começou a acontecer o problema. Se meu dialog abre e eu edito o valor, ele se fecha perfeitamente, porém, não abre mais.
Para eu editar outro item da minha tabela, tenho que dar um refresh na tela. O mesmo acontece caso eu force uma mensagem de erro no dialog, ele se fecha sem exibir qual o erro ocorreu.
Pensei que poderia ser algum problema referente a versão do Prime, mas aí que me enganei. Criei um projeto do zero, só com o intuito de testar isso e vi que o problema ocorre tanto na versão 2.2 quanto na 2.2.1, ou seja, se está funcionando no meu projeto principal é sinal de que estou fazendo algo errado em algum lugar.
Vou postar meu código de teste, que eu usei justamente pra identificar o problema, se alguém puder olhar e ver se encontra o problema, fico grato.
Caso alguém queira esse teste em formato de projeto do Netbeans, só pedir que eu posto aqui.
Bean:
[code]package teste;
import java.io.Serializable;
public class PessoaBean implements Serializable {
private String nome;
public PessoaBean(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
[/code]
ManagedBean:
[code]package teste;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
@javax.faces.bean.ManagedBean(name = “meuMB”)
@ViewScoped
public class ManagedBean implements Serializable {
private PessoaBean pessoa;
private List<PessoaBean> listaPessoa = new ArrayList<PessoaBean>();
public List<PessoaBean> getListaPessoa() {
return listaPessoa;
}
public void setListaPessoa(List<PessoaBean> listaPessoa) {
this.listaPessoa = listaPessoa;
}
public PessoaBean getPessoa() {
return pessoa;
}
public void setPessoa(PessoaBean pessoa) {
this.pessoa = pessoa;
}
public ManagedBean() {
addPessoa();
}
public void addPessoa(){
PessoaBean p1 = new PessoaBean("Joao");
PessoaBean p2 = new PessoaBean("Dunha");
PessoaBean p3 = new PessoaBean("Vito");
PessoaBean p4 = new PessoaBean("Mario");
listaPessoa.add(p1);
listaPessoa.add(p2);
listaPessoa.add(p3);
listaPessoa.add(p4);
}
public void save(){
if(pessoa.getNome().equals("")){
System.out.println("if");
String message = "Errooooo";
FacesContext.getCurrentInstance().addMessage("erroProjeto", new FacesMessage(message));
}else{
System.out.println("save -- "+pessoa.getNome());
}
}
}
[/code]
XHTML:
[code]<?xml version='1.0' encoding='UTF-8' ?>
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<f:view contentType="text/html">
<h:form id="form1">
<p:dataTable id="tabela" value="#{meuMB.listaPessoa}" var="pessoa">
<p:column>
<f:facet name="header">
<h:outputText value="Nome"/>
</f:facet>
<h:outputText value="#{pessoa.nome}"/>
</p:column>
<p:column>
<p:commandLink value="Teste" id="editlink" oncomplete="addEditPopup.show();" update="addEditPanel">
<f:setPropertyActionListener value="#{pessoa}" target="#{meuMB.pessoa}"/>
</p:commandLink>
<p:tooltip for="editlink" value="Editar" />
</p:column>
</p:dataTable>
</h:form>
<p:dialog widgetVar="addEditPopup"
id="addDialog"
width="600"
header="Editar Registro"
modal="true"
visible="#{not empty facesContext.maximumSeverity}"
resizable="false"
draggable="false">
<h:panelGrid columns="1" id="addEditPanel">
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Nome" />
<p:inputText id="id" value="#{meuMB.pessoa.nome}" required="true" requiredMessage="Nome vazio"/>
<p:message for="id"/>
</h:panelGrid>
<p:messages id="erroProjeto"/>
<p:commandButton value="Editar"
update="form1:tabela, addDialog"
actionListener="#{meuMB.save}"/>
<p:commandButton value="Cancelar"
onclick="addEditPopup.hide();return false;" />
</h:form>
</h:panelGrid>
</p:dialog>
</f:view>
</h:body>
[/code]