Minha aplicação teste funcionava normalmente até colocar ajax no projeto
<h:outputScript name=“jsf.js” library=“javax.faces” target=“head”></h:outputScript>
<f:ajax render=":formulario2"></f:ajax>
depois de colocar essas linhas não mais alcança o Bean, não executa as ações de exibir ou alterar
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Tela de cadastro de produto</title>
</head>
<body>
<h:form>
<h2>
<h:outputText value="Novo Produto"
rendered="#{empty produtoBean.produto.id }" />
<h:outputText value="Editar Produto"
rendered="#{not empty produtoBean.produto.id}" />
</h2>
<h:panelGrid columns="2">
<h:outputLabel value="Nome:" for="nome" />
<h:inputText id="nome" value="#{produtoBean.produto.nome}" />
<h:outputLabel value="Descrição:" for="descricao" />
<h:inputText id="descricao" value="#{produtoBean.produto.descricao}" />
<h:outputLabel value="Preço:" for="preco" />
<h:inputText id="preco" value="#{produtoBean.produto.preco}" />
<h:commandButton value="gravar" action="#{produtoBean.grava}" />
</h:panelGrid>
</h:form>
<h:form id="formulario2">
<h:outputScript name="jsf.js" library="javax.faces" target="head"></h:outputScript>
<h:dataTable value="#{produtoBean.produtos}" var="produto">
<h:column>
<f:facet name="header">NOME</f:facet>
#{produto.nome}
</h:column>
<h:column>
<f:facet name="header">DESCRICAO</f:facet>
#{produto.descricao}
</h:column>
<h:column>
<f:facet name="header">PRECO</f:facet>
#{produto.preco}
</h:column>
<h:column>
<f:facet name="header">AÇÕES</f:facet>
<h:commandLink action="#{produtoBean.remove(produto)}"
value="Remover">
<f:ajax render=":formulario2"></f:ajax>
</h:commandLink>
<h:commandLink value="Alterar">
<f:setPropertyActionListener target="#{produtoBean.produto}"
value="#{produto}" />
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</body>
</html>
Bean:
package gov.goias.gra.controle;
import java.util.LinkedList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ViewScoped
@ManagedBean
public class ProdutoBean {
private Produto produto = new Produto();
// Verificar. Ao usar Set(TreeSet, linkedHashSet) não funcionou, porém ao
// mudar para lista o codigo funciona normalmente...
private List<Produto> produtos = new LinkedList<Produto>();
public ProdutoBean() {
for (int x = 0; x < 5; x++) {
String y = geraNumeroAleatorio();
produto.setDescricao("Descricao do produto é " + y);
produto.setNome("Nome do produto é " + y);
produto.setPreco(Double.valueOf(y));
produto.setId(y);
produtos.add(produto);
this.produto = new Produto();
}
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
public List<Produto> getProdutos() {
if (produto == null)
for (int x = 0; x < 20; x++) {
String y = geraNumeroAleatorio();
produto.setDescricao("Descricao do produto é " + y);
produto.setNome("Nome do produto é " + y);
produto.setPreco(Double.valueOf(y));
produto.setId(y);
produtos.add(produto);
}
return produtos;
}
// simula gravação no banco
public void grava() {
produtos.add(produto);
this.produto = new Produto();
}
// simula atualização do banco
public void atualiza(Produto produto) {
produtos.add(produto);
}
// só remove da lista
public void remove(Produto produto) {
produtos.remove(produto);
}
public String geraNumeroAleatorio() {
return String.valueOf((int) (1 + Math.random() * 10));
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
}