Managerbean perde valores

0 respostas
D

pessoal estou precisando de ajuda, ja estou a 1 dia nisso e nao descobri o erro;
o que acontece tenho uma pag digitaliza.xhtml onde eu renderizo varias compontes, o que ocorre é que quando eu seleciono um item no selectonemenu, carrega o proximo com ajax e o usuario aperta o botao e manda um submit pro meu managerBean… la eu recupero o id primeiro select e o do segundo sem problemas entao dou um update nos componetes de baixo e renderizo os campos, quando o preencho estes camposeu perco o id select 1 e do select 2… vou postar o codigo e tentar explicar
melhor.

lembrando que estou usando viewscope

xhtml

<!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"
	xmlns:c="http://java.sun.com/jsp/jstl/core"
	xmlns:a="http://java.sun.com/jsp/jstl/functions">

<!-- Editando o Css dos componetes do primefaces -->
<h:head>
	<style>
		.ui-widget,
		.ui-widget .ui-widget {
		font-size: 12px !important;
		}
	</style>
</h:head>

<p:layout fullPage="true">
 	<p:layoutUnit position="north" size="100" header="Top" resizable="false" closable="false" collapsible="false">  
        <h:outputText value="Top unit content." />  
    </p:layoutUnit> 
      <p:layoutUnit position="west" size="620" resizable="false" closable="false" collapsible="false" effect="drop">  
        	<h:panelGrid columns="1">
				
<h:form id="form" >
	<p:ajaxStatus style="width:16px;height:16px;" id="ajaxStatusPanel">  
	    <f:facet name="start">  
	        <h:graphicImage value="/img/loading.gif" />  
	    </f:facet>
	    
	    <f:facet name="complete">  
	        <h:outputText value="" />  
	    </f:facet>  
	</p:ajaxStatus>    
      
     <p:growl id="msgs" showDetail="true" />  
           
        <p:panel header="Double Combo" style="height:auto;width:600px;">  
            <h:panelGrid columns="2" cellpadding="5"> 
          	<h:outputLabel value="Cliente:" /> 
                <p:selectOneMenu id="cliente" value="#{clienteBean.cliente.id}">
                	<f:selectItem itemLabel="Selecione o Cliente" itemValue="" />   
                    <f:selectItems value="#{clienteBean.lcliente}" 
     				 var="cliente" itemLabel="#{cliente.nome} - #{cliente.vccodCliente}" itemValue="#{cliente.id}" />
                    <p:ajax update="custo" listener="#{clienteBean.montaComboCentroCusto}"/>  
                </p:selectOneMenu>  
            	<h:outputLabel value="N° lote:" /> 
            	<h:inputText value="#{ClienteBean.numLote}"></h:inputText>
            
                <h:outputLabel value="Centro de Custo:" /> 
	            <p:selectOneMenu id="custo" value="#{clienteBean.idCusto}"> 
	           	   <f:selectItem itemLabel="Selecione o Centro de Custo" itemValue="" /> 
                   <f:selectItems value="#{clienteBean.lcusto}" 
     				var="custo" itemLabel="#{custo.vcdescriacao_cc}" itemValue="#{custo.nmcod_cc}"/>
     				<h:panelGroup>
     					<f:facet name="start">  
	        				<h:graphicImage value="/img/loading.gif" />  
	   					</f:facet>
     				</h:panelGroup> 
	            </p:selectOneMenu>
			</h:panelGrid>
			<p:commandButton type="Submit" value="Processar" actionListener="#{clienteBean.renderizaCamposBusca}" ajax="true" 
			update="painelIframe,indexador" />
        </p:panel>  
    </h:form>  
	</h:panelGrid>

<h:panelGrid rendered="true" >
				
<h:form id="formIndexador" prependId="false">
<h:messages/>
<h:panelGrid columns="1">
	<p:panel header="Indexadores" style="margin-bottom:10px;height:auto;width:500px;" rendered="true" id="indexador">
		<h:inputText value="#{clienteBean.idCusto}" />
		<h:inputText value="#{clienteBean.cliente.id}" />
		
		<h:dataTable id="basic" var="index" value="#{clienteBean.lindex}" binding="#{ClienteBean.dataTable}" >
				<p:column>
						<h:outputLabel value="#{index.label}: " rendered="true" />
						<p:inputText value="#{index.textInput}" rendered="#{index.isinput}" />
		
					<h:panelGroup>
							<p:inputText value="#{index.numini}" rendered="#{index.isinm}">
								<f:convertNumber integerOnly="true" />
							</p:inputText>
							<h:outputLabel value="até: " rendered="#{index.isinm}" />
							<p:inputText value="#{index.numfim}" rendered="#{index.isinm}">
								<f:convertNumber integerOnly="true" />
							</p:inputText>
					</h:panelGroup>
	
					<p:inputTextarea value="#{index.textoArea}" rendered="#{index.istxt}" style="width:300px" />
					<p:inputText value="#{index.textInput}" rendered="#{index.isnum}" >
						<f:convertNumber integerOnly="true" />
					</p:inputText>
					
					<h:panelGroup>
						<h:panelGrid columns="1">
							<p:calendar rendered="#{index.isidt}" style="width:10px;" value="#{index.dataini}" />
							<h:outputLabel value="até: " rendered="#{index.isidt}" />
							<p:calendar rendered="#{index.isidt}" style="width:10px;"  value="#{index.datafim}"/>
						</h:panelGrid>
					</h:panelGroup>
					
						<h:outputLabel value="#{index.data} " rendered="#{index.isdat}" />
						<p:calendar rendered="#{index.isdat}" style="width:10px;"  value="#{index.data}"/>
					
					<p:selectOneMenu rendered="#{index.iscombo}" value="#{index.selecionado}">
						<f:selectItems value="#{index.lcombo}" var="combo" itemLabel="#{combo.opcao}" itemValue="#{combo.opcao}" />
					</p:selectOneMenu>
				</p:column>
		</h:dataTable>
		<br />
		<p:commandButton type="Submit" value="salvar" ajax="false" action="#{ClienteBean.salvarIndexadores}" />
	</p:panel>
</h:panelGrid>
	
</h:form>
				
</h:panelGrid> 
    </p:layoutUnit> 
	<p:layoutUnit position="center" visible="true">
		<h:panelGrid id="painelIframe" width="100%">
			<iframe src="#{clienteBean.url}" width="100%" frameborder="0" name="rel" id="pdf" style="height:630px;" scrolling="auto" />
			<h:outputText value="Total de páginas: #{clienteBean.totalPgPdf}" />
			<h:inputText value="#{clienteBean.url}" />
		
		</h:panelGrid>
	</p:layoutUnit>
	<p:layoutUnit position="south" size="100" header="Bottom" resizable="false" closable="false" collapsible="false">  
        <h:outputText value="South unit content." />  
    </p:layoutUnit> 
</p:layout>
</html>

ManagerBean:

package br.com.agm.manager;


import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlPanelGroup;


import br.com.agm.bean.CentroCusto;
import br.com.agm.bean.Cliente;
import br.com.agm.bean.Combo;
import br.com.agm.bean.ContCX;
import br.com.agm.bean.Documento;
import br.com.agm.bean.Indexador;
import br.com.agm.business.CentroCustoBusiness;
import br.com.agm.business.ClienteBusiness;
import br.com.agm.business.DocumentoBusiness;
import br.com.agm.business.IndexacaoBusiness;


@ManagedBean(name="clienteBean")
@ViewScoped
public class ClienteBean implements Serializable{

	private static final long serialVersionUID = 1L;

	private Cliente 	cliente 	= new Cliente(); 
	private Documento 	documento	= new Documento();
	private CentroCusto custo 		= new CentroCusto();
	private Indexador 	index;
	private Combo 		combo;
	private ContCX 		cx;

	private HtmlDataTable dataTable;
	private HtmlPanelGroup group;

	private List<Combo> 		lcombo 		= new ArrayList<Combo>();
	private List<CentroCusto> 	lcusto 		= new ArrayList<CentroCusto>();
	private List<Cliente> 		lcliente 	= new ArrayList<Cliente>();
	private List<Indexador> 	lindex 		= new ArrayList<Indexador>();
	private List<Documento> 	ldoc 		= new ArrayList<Documento>();
	private List<String> 		ldocumentos = new ArrayList<String>();

	private String idCusto;
	private String idCliente;
	private int totalPgPdf;
	private String numlote;
	
	private String url;
	private boolean layout = false;
	

	@PostConstruct
	public void init(){
		montaComboCliente();
	}
	

	/**
	 * Metodo que preenche o dropdown com 
	 * todos os clientes cadastrados.
	 */

	public void montaComboCliente(){

		try {
	
			ClienteBusiness clienteBusiness = ClienteBusiness.getInstance();
			lcliente = clienteBusiness.montaCombo();
	
		} catch (Exception e){
			System.out.println();
		}
	}
	
	
	public String Url(String url){			
		String src = url;
			
		return src;
	}


	/**
	 * Baixa o documento e exibe dentro de um iframe
	 */
	public void baixarDocumento(){
		
		String documento;
		
		try{
			
			DocumentoBusiness documentoBusiness = DocumentoBusiness.getInstance();
			//ClienteBusiness clienteBusiness = ClienteBusiness.getInstance();
			
			//Cliente novoCliente = clienteBusiness.buscaCliente(cliente);
			documento = documentoBusiness.buscaDocumentoFtp();
			List<Documento> ldoc = documentoBusiness.buscaDocumento(documento);
			totalPgPdf = documentoBusiness.calculaQuantidadePaginas(documento);	
			url = Url(ldoc.get(0).getNome());

			
		}catch(Exception e){
			System.out.println("erro nso metodo " +e.getMessage());
		}

	}
	

	
	public void listaDocumentos(){
		
		String documento;
		
		DocumentoBusiness documentoBusiness = DocumentoBusiness.getInstance();
		ldocumentos = documentoBusiness.listaDocsFTP();

	}
	

	public void nextPdf(){
		
		DocumentoBusiness documentoBusiness = DocumentoBusiness.getInstance();
		//documentoBusiness.
		
	}
	

	/**
	 * Metodo que preenche o componte de Select, 
	 * com os centro de custos
	 */
	public void montaComboCentroCusto(){

		try {

			custo.setNmcod_cc(idCusto);
			//cliente.setId(idCliente);

			CentroCustoBusiness centroCustoBusiness = CentroCustoBusiness.getInstance();
			lcusto = centroCustoBusiness.montaCombo(cliente);

		} catch(Exception e){
			System.out.println(e.getMessage());
		}		
	}


	/**
	 * Renderizo os campos de busca do cliente selecionado
	 */
	public void renderizaCamposBusca(){

		IndexacaoBusiness indexBusiness = IndexacaoBusiness.getInstance();

		try {
			custo.setNmcod_cc(idCusto);
			cliente.setCusto(custo);
			lindex = indexBusiness.montaCampoIndex(custo, cliente);
			setLindex(lindex);
			setLayout(true);
			baixarDocumento();	
	
		} catch(Exception e){
			System.out.println("metodo Renderiza: "+e.getMessage());		
		}		
	}

	/**
	 * metodo que adicona um novo documento digitalizado
	 * @return
	 */
	public String salvarDocumento(){

		try{
			DocumentoBusiness documentoBusiness = DocumentoBusiness.getInstance();	
			documentoBusiness.salvarDocumento(documento, cliente);
			
			//documentoBusiness.moveApaga(documento, cliente);

		}catch(Exception e){
			System.out.println("erro ao salvar o documento"+e.getMessage());
		}

		return "/digitaliza?faces-redirect=true";
	}



	@SuppressWarnings("unchecked")
	/**
	 * Pego os dados digitado pelo usuario no 
	 * campos indexadores e gravo na tabela tbcont_cx.
	 */
	public void salvarIndexadores(){

		cx = new ContCX();
		cliente.setCusto(custo);  // esses objetos vem nulos, sendo que no sbmit anterio ele vinha preenchido com o valor dos selects, nao sei pq perco estes valores.
		cx.setCliente(cliente);
		
		IndexacaoBusiness indexacaoBusiness = IndexacaoBusiness.getInstance();
		List<Indexador> lidx = (List<Indexador>) dataTable.getValue();
		indexacaoBusiness.insereIndexadores(lidx,cx);
		salvarDocumento();
	
	}
	



	/** Metodos Get e Set padrão do JSF*/

	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	public List<Cliente> getLcliente() {
		return lcliente;
	}
	public void setLcliente(List<Cliente> lcliente) {
		this.lcliente = lcliente;
	}

	public CentroCusto getCusto() {
		return custo;
	}
	public void setCusto(CentroCusto custo) {
		this.custo = custo;
	}
	public List<CentroCusto> getLcusto() {
		return lcusto;
	}
	public void setLcusto(List<CentroCusto> lcusto) {
		this.lcusto = lcusto;
	}

	public Indexador getIndex() {
		return index;
	}
	public void setIndex(Indexador index) {
		this.index = index;
	}
	public List<Indexador> getLindex() {
		return lindex;
	}
	public void setLindex(List<Indexador> lindex) {
		this.lindex = lindex;
	}


	public List<Documento> getLdoc() {
		return ldoc;
	}
	public void setLdoc(List<Documento> ldoc) {
		this.ldoc = ldoc;
	}
	public Documento getDocumento() {
		return documento;
	}
	public void setDocumento(Documento documento) {
		this.documento = documento;
	}

	public Combo getCombo() {
		return combo;
	}
	public void setCombo(Combo combo) {
		this.combo = combo;
	}

	public List<Combo> getLcombo() {
		return lcombo;
	}

	public void setLcombo(List<Combo> lcombo) {
		this.lcombo = lcombo;
	}

	public HtmlDataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(HtmlDataTable dataTable) {
		this.dataTable = dataTable;
	}
	
	
	public String getIdCusto() {
		return idCusto;
	}

	public void setIdCusto(String idCusto) {
		this.idCusto = idCusto;
	}

	public HtmlPanelGroup getGroup() {
		return group;
	}

	public void setGroup(HtmlPanelGroup group) {
		this.group = group;
	}

	public int getTotalPgPdf() {
		return totalPgPdf;
	}

	public void setTotalPgPdf(int totalPgPdf) {
		this.totalPgPdf = totalPgPdf;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public boolean isLayout() {
		return layout;
	}

	public void setLayout(boolean layout) {
		this.layout = layout;
	}

	public String getNumLote() {
		return numlote;
	}

	public void setNumLote(String numLote) {
		this.numlote = numLote;
	}

	public String getIdCliente() {
		return idCliente;
	}
	
	public void setIdCliente(String idCliente) {
		this.idCliente = idCliente;
	}
	
	public ContCX getCx() {
		return cx;
	}
	
	public void setCx(ContCX cx) {
		this.cx = cx;
	}

}

pessoal se ficou muuito confuso me repondam que eu tento explicar melhor…

obrigado a todos!!

Criado 24 de maio de 2012
Respostas 0
Participantes 1