eu tenho um datatable que lista meus objetos e tenho um botão de editar
<p:commandButton styleClass="botaoIndex" action="#{solicitacoesBean.buscaSolicitacao}"
image="ui-icon ui-icon-search" onstart="statusDialog.show()" onsuccess="statusDialog.hide()"
oncomplete="dialogSolicitacao.show()" update="form2, dlgsolicitacao" >
<f:setPropertyActionListener target="#{solicitacoesBean.solicitacao}" value="#{solicitacao}" />
</p:commandButton>
que chama o meu dialog ‘dialogSolicitacao’ para fazer a edição dos dados
ele vai pro bean tranquilamente, carrega o objeto certo, mas não renderiza ele no dialog…
se eu dou um f5 e tento abrir o dialog
o objeto esta la!
coloca seu dialog dentro do mesmo formulário do seu datatable e remove o h:form que está dentro dele. Ao realizar a chamada para a edição, dê um update SOMENTE no form que está o datatable, assim ele vai capturar e atribuir antes de abrir o seu dialog.
Posta o código do dialog ai…
Estou tendo o mesmo problema. Eu tenho 3 botões, Novo, Deletar e Alterar, 2 funcionam (exceto o alterar). Quando eu clico em deletar ele deleta e atualiza a dataTable, porém quando eu clico em editar ele não atualiza o Dialog com os dados do elemento que eu selecionei. Uma coisa que eu percebi é que ele não atualiza os dados do formulário, ele vai lá no Bean, cria a nova instância e tal, mas o formulário fica com os dados anteriores. Percebi que o setDisciplinaSelecionada não está sendo chamado quando eu clico no botão editar, daí sempre vai nulo os dados. Muito estranho o comportamento, to quase desistindo e fazendo tudo sem usar ajax
Bean
@ManagedProperty("#{disciplinaService}")
private DisciplinaService disciplinaService;
private List<Disciplina> disciplinaList;
private Disciplina disciplinaSelecionada;
public void novo() {
disciplinaSelecionada = new Disciplina();
}
public void salvar() {
if (disciplinaSelecionada.getId() == null) {
disciplinaService.save(disciplinaSelecionada);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Disciplina Adicionada", "A disciplina " + disciplinaSelecionada.getNome() + " foi adicionada com sucesso."));
} else {
disciplinaService.update(disciplinaSelecionada);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Disciplina Alterada", "A disciplina " + disciplinaSelecionada.getNome() + " foi alterada com sucesso."));
}
}
public void editar() {
if (disciplinaSelecionada == null) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Disciplina não selecionada","Você precisa selecionar uma disciplina para deletar."));
} else {
System.out.println("Disciplina selecionada: " + disciplinaSelecionada.getNome());
}
}
public void deletar() {
if (disciplinaSelecionada == null) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Disciplina não selecionada","Você precisa selecionar uma disciplina para deletar."));
return;
}
disciplinaService.delete(disciplinaSelecionada);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Disciplina Removida", "A disciplina " + disciplinaSelecionada.getNome() + " foi removida com sucesso."));
}
//getters and setters omitidos
Página 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:h=“http://java.sun.com/jsf/html”
xmlns:f=“http://java.sun.com/jsf/core”
xmlns:ui=“http://java.sun.com/jsf/facelets”
xmlns:p=“http://primefaces.prime.com.tr/ui”
xmlns:sec=“http://www.springframework.org/security/facelets/tags”>
<body>
<ui:composition template="./../layout.xhtml">
<ui:define name="content">
<h:form id="botoesform">
<p:commandButton value="Nova Disciplina" image="ui-icon ui-icon-document"
action="#{disciplinaBean.novo}" update=":dialogform:infosDisciplinas" oncomplete="dialogGerDisciplina.show()"/>
<p:commandButton value="Deletar" image="ui-icon ui-icon-trash"
action="#{disciplinaBean.deletar}" onclick="return confirm('Tem certeza que deseja excluir a disciplina selcionada?')" update="form:tabela form:msg"/>
<p:commandButton value="Alterar" image="ui-icon ui-icon-folder-open" action="#{disciplinaBean.editar}"
update=":dialogform:infosDisciplinas :form:msg" oncomplete="dialogGerDisciplina.show()"/>
</h:form>
<h:form id="form">
<p:growl id="msg" showDetail="true" showSummary="true"/>
<p:dataTable id="tabela" var="disciplina" selection="#{disciplinaBean.disciplinaSelecionada}"
selectionMode="single" rowKey="#{disciplina.id}"
value="#{disciplinaBean.disciplinaList}">
<f:facet name="header">
Disciplinas Cadastradas
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{disciplina.id}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{disciplina.nome}" />
</p:column>
</p:dataTable>
<p:confirmDialog message="Tem certeza?" width="200"
header="Confirm" severity="alert" widgetVar="confirmation">
<p:commandButton value="Sim" update="cars" actionListener="#{disciplinaBean.deletar}" oncomplete="confirmation.hide()"/>
<p:commandButton value="Não" onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</h:form>
<p:dialog header="Gerência de Disciplinas" widgetVar="dialogGerDisciplina" resizable="false" modal="true" showEffect="slide" width="500">
<h:form id="dialogform">
<h:panelGrid id="infosDisciplina" columns="2" style="margin-bottom: 10px;">
<h:outputLabel for="nome" value="Nome"/>
<p:inputText id="nome" value="#{disciplinaBean.disciplinaSelecionada.nome}"/>
<p:commandButton value="Salvar" update=":form:tabela :form:msg" oncomplete="dialogGerDisciplina.hide();" action="#{disciplinaBean.salvar}"/>
</h:panelGrid>
</h:form>
</p:dialog>
</ui:define>
</ui:composition>
</body>
</html>
valeu galera. Estou usando o primefaces 3.0 M3