Boa noite pessoal.
Estou com um probleminha aqui, já fucei tudo e até agora não consegui resolver.
O projeto que estou trabalho utiliza PrimeFaces + OpenFaces + JSF 2 + Hibernate...
Possuo um tabela na qual é possível realizar seleção única de linha.
Após selecionar uma linha e clicar no botão "Editar" abre uma janela modal
Após atualizar os dados e clicar no botão salvar a página é recarregada com a tabela atualizada.
O problema ocorre a partir desse instante, qualquer operação que tento realizar (selecionar uma linha, cadastrar uma nova entidade) da erro e surgi a mensagem
"Error while performing Ajax request: No xml response received -- check server logs."
OBS: Para criar uma nova entidade utilizo praticamente o mesmo procedimento. Um botão chama um janela, porem com os campos vazios, que apos preenchidos e apos clicar no botao salvar a pagina é recarregada com a tabela atualizada. [Os botões salvar tanto da janela para edicao como para cadastro de nova entidade não usam Ajax].
Espero que possam me ajudar. Abaixo irei postar os códigos fontes.
Página: backlog.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:o="http://openfaces.org/"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<title>Scrum: Product Backlog</title>
</h:head>
<h:body>
<h1>Product Backlog</h1>
<!--****************************************************************************************************************************************-->
<!-- Janela para cadastro de nova estória **************************************************************************************************-->
<!--****************************************************************************************************************************************-->
<o:window id="janelaNovaEstoria" caption="Nova estória" modal="true" modalLayerStyle="background-color:white; opacity:0.5"
minWidth="470px" width="470px" minHeight="245px" height="245px" style="max-width: 470px; max-height: 245px">
<o:captionArea>
<o:closeWindowButton/>
</o:captionArea>
<h:form id="formularioNovaEstoria">
<table>
<tr>
<td align="right"><h:outputText value="Descrição: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.descricao}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Como demonstrar: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.comoDemonstrar}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Estimativa: "/></td>
<td><h:inputText size="2" value="#{backLogBean.estoriaSelecionada.estimativa}"/></td>
<td align="right"><h:outputText value="Importância: "/></td>
<td><h:inputText size="2" value="#{backLogBean.estoriaSelecionada.importancia}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Categoria: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.categoria}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Notas: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.notas}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Solicitante: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.solicitante}"/></td>
</tr>
<tr>
<td colspan="4" align="right">
<o:commandButton value="salvar" action="#{backLogBean.salvarEstoria}" />
</td>
</tr>
</table>
</h:form>
</o:window>
<!--****************************************************************************************************************************************-->
<!-- Fim da Janela para cadastro de nova estória *******************************************************************************************-->
<!--****************************************************************************************************************************************-->
<!--****************************************************************************************************************************************-->
<!-- Janela para edição de estória *********************************************************************************************************-->
<!--****************************************************************************************************************************************-->
<o:window id="janelaEditaEstoria" caption="Edição estória" modal="true" modalLayerStyle="background-color:white; opacity:0.5"
minWidth="470px" width="470px" minHeight="245px" height="245px" style="max-width: 470px; max-height: 245px">
<p:outputPanel id="outputEditaEstoria">
<h:form id="formularioEditaEstoria">
<h:inputHidden value="#{backLogBean.estoriaSelecionada.id}" />
<h:inputHidden value="#{backLogBean.estoriaSelecionada.status}" />
<table>
<tr>
<td align="right"><h:outputText value="Descrição: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.descricao}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Como demonstrar: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.comoDemonstrar}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Estimativa: "/></td>
<td><h:inputText size="2" value="#{backLogBean.estoriaSelecionada.estimativa}"/></td>
<td align="right"><h:outputText value="Importância: "/></td>
<td><h:inputText size="2" value="#{backLogBean.estoriaSelecionada.importancia}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Categoria: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.categoria}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Notas: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.notas}"/></td>
</tr>
<tr>
<td align="right"><h:outputText value="Solicitante: "/></td>
<td colspan="3"><h:inputText size="50" value="#{backLogBean.estoriaSelecionada.solicitante}"/></td>
</tr>
<tr>
<td colspan="4" align="right">
<o:commandButton value="salvar" action="#{backLogBean.updateEstoria}" />
</td>
</tr>
</table>
</h:form>
</p:outputPanel>
</o:window>
<!--****************************************************************************************************************************************-->
<!-- Fim da Janela para edição estória *****************************************************************************************************-->
<!--****************************************************************************************************************************************-->
<h:form id="form">
<!--****************************************************************************************************************************************-->
<!-- Botões ********************************************************************************************************************************-->
<!--****************************************************************************************************************************************-->
<p:commandButton value="Nova Estória" oncomplete="O$('janelaNovaEstoria').showCentered();" actionListener="#{backLogBean.novaEstoria}" />
<p:commandButton value="Editar estória" oncomplete="O$('janelaEditaEstoria').showCentered();" update="outputEditaEstoria" />
<p:commandButton value="Deletar estória" action="#{backLogBean.deletarEstoria}" ajax="false" />
<p:commandButton value="Limpar seleção" update="form:desc" onclick="O$('form:tabelaBacklog').clearSelection();" />
<!--****************************************************************************************************************************************-->
<!-- Fim dos Botões ************************************************************************************************************************-->
<!--****************************************************************************************************************************************-->
<div id="msgs" style="width: 600px;"> <p:messages globalOnly="true" showDetail="true" showSummary="true" /> </div>
<!--****************************************************************************************************************************************-->
<!-- Tabela com as estórias do product backlog *********************************************************************************************-->
<!--****************************************************************************************************************************************-->
<p:outputPanel id="outputBacklog">
<o:dataTable id="tabelaBacklog" value="#{backLogBean.listaEstorias}" var="item"
horizontalGridLines="1px dotted gray"
verticalGridLines="1px dotted gray"
commonHeaderSeparator="3px solid gray"
commonFooterSeparator="3px solid gray"
headerHorizSeparator="2px solid gray"
subHeaderRowSeparator="1px dotted black"
footerHorizSeparator="2px solid gray"
headerVertSeparator="1px solid gray"
footerVertSeparator="1px solid gray">
<!-- Forma de seleção de conteúdo -->
<o:singleRowSelection rowData="#{backLogBean.estoriaSelecionada}" render="form:desc" />
<!-- Cabeçalho da tabela -->
<f:facet name="header">
Product Backlog
</f:facet>
<!-- Mensagem de que nenhuma estória foi cadastrada
exibida quando a tabela estiver vazia-->
<f:facet name="noDataMessage">
Nenhuma estória encontrada
</f:facet>
<!-- Colunas da tabela -->
<o:column style="padding: 5px" >
<f:facet name="header">
Id
</f:facet>
<h:outputText value="#{item.id}"/>
</o:column>
<o:column width="200" style="padding: 5px">
<f:facet name="header">
Descriçao
</f:facet>
<h:outputText value="#{item.descricao}"/>
</o:column>
<o:column width="200" style="padding: 3px">
<f:facet name="header">
Como demonstrar
</f:facet>
<h:outputText value="#{item.comoDemonstrar}"/>
</o:column>
<o:column style="padding: 5px">
<!-- Cabeçalho da coluna -->
<f:facet name="header">
Estimativa
</f:facet>
<h:outputText value="#{item.estimativa}"/>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Importância
</f:facet>
<h:outputText value="#{item.importancia}"/>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Categoria
</f:facet>
<h:outputText value="#{item.categoria}"/>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Notas
</f:facet>
<h:outputText value="#{item.notas}"/>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Solicitante
</f:facet>
<h:outputText value="#{item.solicitante}"/>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Status
</f:facet>
<h:outputText value="#{item.status}"/>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Data Pedido
</f:facet>
<h:outputText value="#{item.dataPedido}">
<f:convertDateTime dateStyle="medium"/>
</h:outputText>
</o:column>
<o:column style="padding: 5px">
<f:facet name="header">
Data Entrega
</f:facet>
<h:outputText value="#{item.dataEntrega}">
<f:convertDateTime dateStyle="medium"/>
</h:outputText>
</o:column>
<!-- Fim das colunas da tabela -->
</o:dataTable>
</p:outputPanel>
<!--****************************************************************************************************************************************-->
<!-- Fim da tabela com as estórias do product backlog***************************************************************************************-->
<!--****************************************************************************************************************************************-->
<h:outputText id="desc" value="#{backLogBean.estoriaSelecionada.descricao}"/>
</h:form>
</h:body>
</html>
package beans;
import Aplicacao.HibernateUtil;
import DAO.EstoriaDao;
import entidades.Estoria;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
@ManagedBean
@RequestScoped
public class BackLogBean {
private Estoria estoriaSelecionada = new Estoria();
private ArrayList<Estoria> listaEstorias = null;
private EstoriaDao dao = new EstoriaDao(HibernateUtil.openSession());
public Estoria getEstoriaSelecionada() {
return estoriaSelecionada;
}
public void setEstoriaSelecionada(Estoria estoriaSelecionada) {
this.estoriaSelecionada = estoriaSelecionada;
}
public ArrayList<Estoria> getListaEstorias() {
if (listaEstorias == null) {
listaEstorias = (ArrayList<Estoria>) dao.listar();
}
return listaEstorias;
}
public void setListaEstorias(ArrayList<Estoria> listaEstorias) {
this.listaEstorias = listaEstorias;
}
//FIM DOS GETTERS E SETTERS
//Salva um estoria no banco
public String salvarEstoria() {
estoriaSelecionada.setStatus(Estoria.PRODUCT_BACKLOG);
dao.save(estoriaSelecionada);
estoriaSelecionada = new Estoria();
listaEstorias = null;
return "backlog";
}
//Deleta uma estoria do banco
public String deletarEstoria() {
if (verificaSelecao()) {
dao.delete(estoriaSelecionada);
estoriaSelecionada = new Estoria();
listaEstorias = null;
return "backlog";
}
return null;
}
//Atualiza uma estoria no banco
public String updateEstoria() {
dao.update(estoriaSelecionada);
estoriaSelecionada = new Estoria();
listaEstorias = null;
return "backlog";
}
//Cria uma nova estoria para ser utilizada no formulario de cadastro
public void novaEstoria(ActionEvent event) {
estoriaSelecionada = new Estoria();
}
//Verifica se existe uma estoria selecionada
private boolean verificaSelecao() {
if (estoriaSelecionada == null) {
FacesContext ctx = FacesContext.getCurrentInstance();
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Atenção: ", "Selecione uma estória na lista");
ctx.addMessage(null, msg);
return false;
} else {
return true;
}
}
}
Então, é isso ai pessoal.. Sei que o post ficou um pouco grandinho, mas acho que tem tudo necessário para que alguém possa entender o problema e me ajudar.
Abraços.