Boa Noite Pessoal, estou com um problema que não consigo solucionar ja pesquisei na net e nada, gostaria muito da ajuda de vcs
Tenho um DataTable do richFaces onde possuo uma lista de Fornecedores, com uma coluna para alteracão quando eu clicar, quando seleciono seto o parametro com o id
pegando no MB conforme abaixo
Data Table
<rich:dataTable value="#{fornecedorHandler.fornecedores}"
var="f" rendered="#{not empty fornecedorHandler.fornecedores}" rows="5">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{f.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{f.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Descricao" />
</f:facet>
<h:outputText value="#{f.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Alterar" />
</f:facet>
<h:commandLink actionListener="#{fornecedorHandler.escolheFornecedor}" immediate="true">
<h:outputText value="(Alterar)"/>
<f:param id="editId" name="id" value="#{f.id}"/>
</h:commandLink>
</h:column>
<f:facet name="footer">
<rich:datascroller/>
</f:facet>
</rich:dataTable>
ManagerBean que le a acão e get do DataTable
public void escolheFornecedor(ActionEvent event) {
UIComponent link = event.getComponent();
UIParameter param = (UIParameter) link.findComponent("editId");
Long id = (Long) param.getValue();
this.fornecedor = this.fornecedores.get(id.intValue() - 1);
}
public List<Fornecedor> getFornecedores() {
//System.out.println("Lendo fornecedores #" + fornecedores.size());
fornecedores = this.dao.pesquisar(fornecedor);
return fornecedores; //fornecedores;
}
Quando busco todos os fornecedores no getFornecedores(), apos clicar em alterar ele executa o evento escolherFornecedor normalmalmente e consigo pegar o parametro,
Porem não quero trazer todos os fornecedores e possuo campos para filtrar a Lista de fornecedores, apos filtrar a lista, ai o link editar não funciona , apos clicar ele apaga os dados do DataTable,
como posso solucionar isso? uso o MB como Scopo de Request.Nem chega a entrar no evento escolherFornecedor só le o getFornecedor.
Segue o Codigo completo
MainPage
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<f:view>
<f:loadBundle basename="m" var="msgs" />
<h:outputText value="#{msgs['bemvindo']}" />
<h:outputText value="#{autenticator.login}" />
<rich:tabPanel>
<rich:tab label="Fornecedor">
<h:form id="cadastro">
<br />
<h:outputText value="#{msgs['fornecedor-nome']}" /><br/>
<h:inputText id="nome" required="true"
value="#{fornecedorHandler.fornecedor.nome}">
<f:validateLength minimum="5" />
</h:inputText>
<h:message for="nome" style="color:darkred" />
<br />
<br />
<h:outputText value="#{msgs['fornecedor-descricao']}"></h:outputText>
<br />
<h:inputTextarea value="#{fornecedorHandler.fornecedor.descricao}" />
<br />
<h:commandButton value="Salvar" action="#{fornecedorHandler.salvar}"/>
<h:commandButton value="Pesquisar" actionListener="#{fornecedorHandler.pesquisar}"/>
</h:form>
<rich:spacer height="10"/>
<rich:separator height="1" lineType="dotted"/>
<rich:spacer height="10"/>
<jsp:include page="lista.jsp" />
</rich:tab>
<rich:tab label="Contas a Pagar">
<jsp:include page="contas.jsp"/>
</rich:tab>
</rich:tabPanel>
</f:view>
</body>
</html>
Lista
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@taglib uri="http://richfaces.org/rich" prefix="rich"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<f:subview id="lista">
<h:form>
<rich:dataTable value="#{fornecedorHandler.fornecedores}"
var="f" rendered="#{not empty fornecedorHandler.fornecedores}" rows="5">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{f.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{f.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Descricao" />
</f:facet>
<h:outputText value="#{f.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Alterar" />
</f:facet>
<h:commandLink actionListener="#{fornecedorHandler.escolheFornecedor}" immediate="true">
<h:outputText value="(Alterar)"/>
<f:param id="editId" name="id" value="#{f.id}"/>
</h:commandLink>
</h:column>
<f:facet name="footer">
<rich:datascroller/>
</f:facet>
</rich:dataTable>
</h:form>
</f:subview>
</body>
</html>
FornecedorHandler
package br.com.caelum.fj26;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.component.UIParameter;
import javax.faces.event.ActionEvent;
import org.hibernate.classic.Session;
import br.com.caelum.fj26.dao.Dao;
import br.com.caelum.fj26.util.HibernateUtil;
public class FornecedorHandler {
private Fornecedor fornecedor = new Fornecedor();
private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
//private long count = 0l;
private Dao<Fornecedor> dao;
public void setSessao(Session sessao){
this.dao= new Dao<Fornecedor>(sessao,Fornecedor.class);
}
public String salvar(){
HibernateUtil util = new HibernateUtil();
System.out.println("Adicionando"+fornecedor.getNome());
this.dao.merge(fornecedor);
//if(this.fornecedor.getId()==null){
//this.fornecedor.setId(++count);
//this.fornecedores.add(fornecedor);
//}
this.fornecedor= new Fornecedor();
return "Sussesso";
}
public void escolheFornecedor(ActionEvent event) {
UIComponent link = event.getComponent();
UIParameter param = (UIParameter) link.findComponent("editId");
Long id = (Long) param.getValue();
this.fornecedor = this.fornecedores.get(id.intValue() - 1);
}
public List<Fornecedor> getFornecedores() {
//System.out.println("Lendo fornecedores #" + fornecedores.size());
fornecedores = this.dao.pesquisar(fornecedor);
return fornecedores; //fornecedores;
}
public void pesquisar(ActionEvent event){
fornecedores = this.dao.pesquisar(fornecedor);
}
public Fornecedor getFornecedor() {
return fornecedor;
}
public void setFornecedor(Fornecedor fornecedor) {
this.fornecedor = fornecedor;
}
}
FAces
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
<application>
<message-bundle>m</message-bundle>
<resource-bundle>
<base-name>m</base-name>
<var>msgs</var>
</resource-bundle>
<locale-config>
<default-locale>pt_BR</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
</locale-config>
</application>
<managed-bean>
<managed-bean-name>autenticator</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.LoginHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>fornecedorHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.FornecedorHandler</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>sessao</property-name>
<value>#{requestScope.sessao}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>contaPagarHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.ContaPagarHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/olajsf.jsp</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/mainpage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Obrigado