Problema JSF + Action + preenchimento das beans

0 respostas
liviaguedes

Olá Galera do GUJ,

Ja tinha feito um topico antes meio q relacionado com o problema atual…
http://www.guj.com.br/posts/list/139767.java

ok, dexa eu tentar explicar… tenho um produto.jsp e uma pagina de composicao.jsp dentro de uma div…

<div id="divComposicao">
		<jsp:include page="composicao.jsp" />
</div>

Entao tenho produto:

public class Produto implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	@Column(name="id_produto")
	private int id;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_grupo")
	private Grupo grupo;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_fornecedor")
	private Fornecedor fornecedor;
	
	@Column(name="cd_produto")
	private Integer codigo;
	
	@Column(name="nm_produto")
	private String nome;
	
	@Column(name="nm_produto_resum")
	private String nomeResumido;
	
	@Column(name="ic_composto")
	private int composto;
	
	@Column(name="ic_exibir_pv")
	private int exibirPDV;
	
	@Column(name="cd_unidade_compra")
	private String unidadeCompra;
	
	@Column(name="cd_unidade_venda")
	private String unidadeVenda;
	
	@Column(name="cd_barras")
	private String codigoBarras;
	
	@OneToMany(mappedBy="produto",fetch=FetchType.EAGER)
	private List<Composicao> compostos;
	
	@Column(name="cd_qtde_minima")
	private int qtdeMinima;
	
	@Transient
	private int quantidade;
	
	@Transient
	private boolean selecionadoComposto;
	
	@Transient
	private boolean selecionadoExibirPDV;

//getter and setters..

composicao:

public class Composicao implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	@Column(name="id_composicao")
	private int id;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_produto")
	private Produto produto;
	
	@OneToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="id_composto")
	private Produto composto;
	
	@Column(name="cd_qtde")
	private Integer quantidade;
	
	//getter and setters..

}

ProdutoManager:

public class ProdutoManager {

	private Produto produto;
	private Estoque estoque;
	private EstoqueManager estoqueManager = new EstoqueManager();
	private ComposicaoManager composicaoManager = new ComposicaoManager();
	private Composicao composicao;
	
	private UIDataTable table;
	private List<Produto> lista;
	private ProdutoPresentationService produtoPresentationService = new ProdutoPresentationService();
	protected HtmlAjaxCommandLink updateLink, estoqueLink;

	private boolean editable = false; // editable mode means editable or not

	//produtos do DragInDrop
	private List<Composicao> produtosSelecionados = new ArrayList<Composicao>();
	
	List<Composicao> listaAutoComplete;
	

	public ProdutoManager() throws Exception {		
		lista = produtoPresentationService.getService().list();			
	}

	
	public void insertAction(ActionEvent e) throws Exception {			
		
		if(validator()) {
			
			if(this.produto.isSelecionadoComposto()==true) 
				this.produto.setComposto(1);
			else 
				this.produto.setComposto(0);
			
			if(this.produto.isSelecionadoExibirPDV()==true) 
				this.produto.setExibirPDV(1);
			else 
				this.produto.setExibirPDV(0);
			
			produtoPresentationService.insert(this.produto);
			
			int idProduto = produtoPresentationService.getService().getByLastId();
			this.produto.setId(idProduto);
			System.out.println("idProduto: " + idProduto);
			
			System.out.println("TENTANDO INSERIR A COMPOSICAO :: \n\n");
		
			if(this.produto.isSelecionadoComposto()==true) {
				this.composicaoManager.insertAction(e, this.produto);
			}
			
			this.clearFields();
			this.lista = produtoPresentationService.getService().list();
		}else {
			System.out.println("nao posso cadastrar, campo em branco");
		}
	}

	public void editAction(ActionEvent e) throws Exception {
		Produto linha = (Produto) table.getRowData();

		this.produto.setId(linha.getId());
		this.produto.setNome(linha.getNome());
		this.produto.setNomeResumido(linha.getNomeResumido());
		this.produto.setCodigo(linha.getCodigo());
		this.produto.setUnidadeCompra(linha.getUnidadeCompra());
		this.produto.setUnidadeVenda(linha.getUnidadeVenda());
		this.produto.setCodigoBarras(linha.getCodigoBarras());		
		this.produto.setSelecionadoComposto(linha.isSelecionadoComposto());
		this.produto.setSelecionadoExibirPDV(linha.isSelecionadoExibirPDV());
		this.produto.setComposto(linha.getComposto());
		this.produto.setExibirPDV(linha.getExibirPDV());
		this.produto.setGrupo(linha.getGrupo());
		this.produto.setFornecedor(linha.getFornecedor());
		this.produto.setQtdeMinima(linha.getQtdeMinima());

		
		if(linha.getComposto()==0) {
			this.produto.setSelecionadoComposto(false);
		}else {
			this.produto.setSelecionadoComposto(true);
		}
		
		if(linha.getExibirPDV()==0) {
			this.produto.setSelecionadoExibirPDV(false);
		}else {
			this.produto.setSelecionadoExibirPDV(true);
		}
		
		//retorna para tela os dados do estoque daquele produto
		this.estoque = this.estoqueManager.getQtdeTotalByIdProduto(this.produto.getId());
		
		System.out.println("ANTES \n\n");
		if(this.produto.isSelecionadoComposto()==true) {
			this.composicaoManager.editAction(e, this.produto);
			this.composicaoManager.setListaAutoComplete(this.composicaoManager.getListaAutoComplete());
		}
		System.out.println("DEPOIS \n\n");
		
		// save into table as attribute also for postback retrieval
		table.getAttributes().put("linhaID", linha.getId());
		this.setEditable(true);
		this.updateLink.setRendered(true);
		this.estoqueLink.setRendered(true);
		
	}

	
	public void updateAction(ActionEvent e) throws Exception {
		Produto linha = new Produto();

		linha.setId((Integer) table.getAttributes().get("linhaID"));
		linha.setNome(this.produto.getNome());
		linha.setNomeResumido(this.produto.getNomeResumido());
		linha.setCodigo(this.produto.getCodigo());
		linha.setUnidadeCompra(this.produto.getUnidadeCompra());
		linha.setUnidadeVenda(this.produto.getUnidadeVenda());
		linha.setCodigoBarras(this.produto.getCodigoBarras());
		linha.setCompostos(this.produto.getCompostos());		
		linha.setSelecionadoComposto(this.produto.isSelecionadoComposto());
		linha.setSelecionadoExibirPDV(this.produto.isSelecionadoExibirPDV());
		linha.setComposto(this.produto.getComposto());
		linha.setExibirPDV(this.produto.getExibirPDV());
		linha.setGrupo(this.produto.getGrupo());
		linha.setFornecedor(this.produto.getFornecedor());
		linha.setQtdeMinima(this.produto.getQtdeMinima());
		
		if(this.produto.isSelecionadoComposto()==true) this.produto.setComposto(1);
		else this.produto.setComposto(0);				
		linha.setComposto(this.produto.getComposto());
		
		if(this.produto.isSelecionadoExibirPDV()==true) this.produto.setExibirPDV(1);
		else this.produto.setExibirPDV(0);
		linha.setExibirPDV(this.produto.getExibirPDV());

			
		produtoPresentationService.update(linha);
		//this.estoqueManager.estoquePresentationService.update(this.estoque);
		
		this.clearFields();
		this.setEditable(false);
		this.updateLink.setRendered(false);
		this.estoqueLink.setRendered(false);
		this.lista = produtoPresentationService.getService().list();
	}

	
	public void cancelAction(ActionEvent e) throws Exception {
		this.clearFields();
		this.setEditable(false);
		this.updateLink.setRendered(false);
		this.estoqueLink.setRendered(false);
		
		this.composicaoManager.clearListaAutoComplete(this.listaAutoComplete);
		this.composicaoManager.removeSessionListaAutoComplete();
	}

	
	public void deleteAction(ActionEvent e) throws Exception {
		if (table.getRowData() != null) {
			Produto linha = (Produto) table.getRowData();
			produtoPresentationService.delete(linha);
			
			this.clearFields();
			updateLink.setRendered(false);
			this.estoqueLink.setRendered(false);
			this.lista = produtoPresentationService.getService().list();
		}
	}

	
	void clearFields() throws Exception {	
		System.out.println(" LIMPANDO CAMPOS PRODUTOS \n");
		this.produto = new Produto();
		this.estoque = new Estoque();
		//this.listaAutoComplete = new ArrayList<Composicao>();
	}

	
	private boolean validator() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message = new FacesMessage();
		message.setSeverity(FacesMessage.SEVERITY_ERROR);
	
		// ************  produto  ****************
		if (this.produto.getCodigo()<=0) {
			message.setSummary("Por favor preencha o campo do Código.");
			message.setDetail("Por favor preencha o campo do Código.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			System.out.println("message: " + message);
			return false;
		} else if (StringUtils.isEmpty(this.produto.getNome())) {
			message.setSummary("Por favor preencha o campo do Nome.");
			message.setDetail("Por favor preencha o campo do Nome.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			System.out.println("message: " + message);
			return false;
		} else if (StringUtils.isEmpty(this.produto.getNomeResumido())) {
			message.setSummary("Por favor preencha o campo do Nome Resumido.");
			message.setDetail("Por favor preencha o campo do Nome Resumido.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			System.out.println("message: " + message);
			return false;
		} else if (StringUtils.isEmpty(this.produto.getUnidadeCompra())) {
			message.setSummary("Por favor preencha o campo da Unidade de Compra.");
			message.setDetail("Por favor preencha o campo da Unidade de Compra.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			System.out.println("message: " + message);
			return false;
		} else if (StringUtils.isEmpty(this.produto.getUnidadeVenda())) {
			message.setSummary("Por favor preencha o campo da Unidade de Venda.");
			message.setDetail("Por favor preencha o campo da Unidade de Venda.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			System.out.println("message: " + message);
			return false;
		}else if (this.produto.getGrupo()== null) {
				message.setSummary("Por favor selecione o grupo.");
				message.setDetail("Por favor selecione o grupo.");
				context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
				System.out.println("message: " + message);
				return false;
		} else if (this.produto.getFornecedor() == null) {
				message.setSummary("Por favor selecione o fornecedor.");
				message.setDetail("Por favor selecione o fornecedor.");
				context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
				System.out.println("message: " + message);
				return false;
		}else if (this.produto.getQtdeMinima()<=0) {
					message.setSummary("Por favor preencha o campo de quantidade mínima.");
					message.setDetail("Por favor preencha o campo de quantidade mínima.");
					context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
					System.out.println("message: " + message);
					return false;
		} else {
			message.setSummary("Cadastro realizado com sucesso.");
			message.setDetail("Cadastro realizado com sucesso.");
			context.addMessage("formCadastrarProduto:msgTelaCaixa", message);
			return true;
		}	
		
	}
	
	
	/**
	 * Combo de Grupos
	 */
	public List<SelectItem> getGrupos() throws Exception {
		Grupo[] array = new GrupoPresentationService().list();
		List<Grupo> listaGrupos = Arrays.asList(array);
		List<SelectItem> grupos = new ArrayList<SelectItem>(listaGrupos.size());
		
		Grupo aux = new Grupo();
		aux.setId(0);
		aux.setGrupo(" - Selecione - ");
		
		grupos.add(new SelectItem(aux, aux.getGrupo()));
		for (Grupo obj : listaGrupos) {
			grupos.add(new SelectItem(obj, obj.getGrupo()));
		}
		return grupos;
	}
	
	
	/**
	 * Combo de Fornecedores
	 */
	public List<SelectItem> getFornecedores() throws Exception {
		Fornecedor[] array = new FornecedorPresentationService().list();
		List<Fornecedor> listaFornecedores = Arrays.asList(array);
		List<SelectItem> fornecedores = new ArrayList<SelectItem>(listaFornecedores.size());
		
		Fornecedor aux = new Fornecedor();
		aux.setId(0);
		aux.setNomeFantasia(" - Selecione - ");
		
		fornecedores.add(new SelectItem(aux, aux.getNomeFantasia()));
		for (Fornecedor obj : listaFornecedores) {
			fornecedores.add(new SelectItem(obj, obj.getNomeFantasia()));
		}
		return fornecedores;
	}
	
	
	/**
	 * Chama pagina de estoque
	 * @return
	 */
	public String chamarEstoque(){
		this.estoqueLink.setRendered(true);
		return "chamarEstoque";
	}
	    
    	//getter and setters..

Composicao:

public class ComposicaoManager {

	private Composicao composicao;
	private Produto produto = new Produto();
	private Produto composto = new Produto();
	Produto produtoLista = null;
		
	public  ComposicaoPresentationService composicaoPresentationService = new ComposicaoPresentationService();
	private ProdutoPresentationService produtoPresentationService = new ProdutoPresentationService();
	
	private UIDataTable table;
	private List<Composicao> listaComposicao;
	private List<Produto> listaProduto = new ArrayList<Produto>();
	private HtmlAjaxCommandLink updateLink;

	private boolean editable = false; // editable mode means editable or not
	
	//parametros passados pelo botao adicionar
	String nomeProduto = "", idProduto= "";

	public List<Composicao> listaAutoComplete = new ArrayList<Composicao>(); 
	
	
	public ComposicaoManager() throws Exception {
		this.listaProduto = produtoPresentationService.getService().list();
	}
	
	
	public void insertAction(ActionEvent e, Produto produto2) throws Exception {	
		
		System.out.println(" ***  ***************  INSERT DE COMPOSICAO  ****************  ***************   \n");
		this.produto = produto2;
		
		this.listaAutoComplete = getSessionListaAutoComplete();
		
		System.out.println(" TAMANHO DA LISTA : " + this.listaAutoComplete.size());
		
		for (Composicao composicao : this.listaAutoComplete) {
			System.out.println("\n ---------------------------  DENTRO DO PRODUTO - INSERT  --------------------------");
			System.out.println(" Composto>> " + composicao.getComposto().getId());
			System.out.println(" Composto>> " + composicao.getComposto().getNome());
			System.out.println(" Composto>> " + composicao.getQuantidade());
			System.out.println(" Produto a ser atribuido>> " + composicao.getProduto().getId());
			System.out.println(" Produto>> " + composicao.getProduto().getNome());
			System.out.println("\n ---------------------------");
			
			this.composicaoPresentationService.insert(composicao);
		
		}
		System.out.println("\n  >>> ANTES DO REMOVER  - getListaAutoComplete : " + getListaAutoComplete().size() + "\n");
		this.clearListaAutoComplete(this.listaAutoComplete);
		removeSessionListaAutoComplete();
		this.clearFields();		
		
		System.out.println("\n  >>> DEPOIS DO REMOVER - getListaAutoComplete : " + getListaAutoComplete().size() + "\n");
		System.out.println("\n\n *****************  INSERT DE COMPOSICAO  ****************  ***************   \n");
		
	}	

	
	
	public void editAction(ActionEvent e, Produto produto2) throws Exception {
		
		clearListaAutoComplete(this.listaAutoComplete);
		removeSessionListaAutoComplete();
	
		
		System.out.println(" ***************  EDIT DE COMPOSICAO  ****************  ***************   \n");
		this.produto = produto2;
		
		setSessionListaAutoComplete(getListaAutoCompleteById(this.produto.getId()));
		this.listaAutoComplete = getSessionListaAutoComplete();
		
		System.out.println(" TAMANHO DA LISTA : " + this.listaAutoComplete.size());
		
		for (Composicao composicao : this.listaAutoComplete) {
			System.out.println("\n ---------------------------  DENTRO DO PRODUTO - EDIT  --------------------------");
			System.out.println(" Composto>> " + composicao.getComposto().getId());
			System.out.println(" Composto>> " + composicao.getComposto().getNome());
			System.out.println(" Composto>> " + composicao.getQuantidade());
			System.out.println(" Produto a ser atribuido>> " + composicao.getProduto().getId());
			System.out.println(" Produto>> " + composicao.getProduto().getNome());
			System.out.println("\n ---------------------------");
					
		}
		
		System.out.println(" ****************  EDIT DE COMPOSICAO  ****************  ***************   \n");
		
	}

	
	
	public void updateAction(ActionEvent e) throws Exception {
		
		Composicao linha = new Composicao();

		linha.setId((Integer) table.getAttributes().get("linhaID"));
		
		linha.setProduto(this.composicao.getProduto());		
		linha.setQuantidade(this.composicao.getQuantidade());
			
		composicaoPresentationService.update(linha);
		
		this.clearFields();
		this.setEditable(false);
		this.updateLink.setRendered(false);
		this.listaComposicao = composicaoPresentationService.getService().list();
	}

	
	public void cancelAction(ActionEvent e) throws Exception {
		this.clearFields();
		this.setEditable(false);
		this.updateLink.setRendered(false);
	}

	
	public void deleteAction(ActionEvent e) throws Exception {
		
		if (table.getRowData() != null) {
			Composicao linha = (Composicao) table.getRowData();
			composicaoPresentationService.delete(linha);
			
			this.clearFields();
			updateLink.setRendered(false);
			this.listaComposicao = composicaoPresentationService.getService().list();
		}
	}

	
	void clearFields() {		
		System.out.println("LIMPANDO CAMPOS COMPOSICAO \n");
		this.composicao = new Composicao();		
		this.composto = new Produto();	
		this.produtoLista= new Produto(); 
		this.listaProduto = new ArrayList<Produto>();
		this.listaComposicao = new ArrayList<Composicao>();
	}
	
	
	public void clearListaAutoComplete(List<Composicao> listaAutoComplete) {
		this.listaAutoComplete = new ArrayList<Composicao>();
		
		Iterator<Composicao> it = listaAutoComplete.iterator();
		while(it.hasNext()){
			if(it.next() != null) 
				System.out.println("  removendo a lista Composto >> " + it.toString());
				it.remove();
		}
			
		
	}
	
	
	private boolean validator() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message = new FacesMessage();
		message.setSeverity(FacesMessage.SEVERITY_ERROR);
	
		 if (StringUtils.isEmpty(this.composicao.getProduto().getNome())) {
			message.setSummary("Por favor preencha o campo do produto.");
			message.setDetail("Por favor preencha o campo do produto.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			return false;
		} else if (this.composicao.getQuantidade() <=0) {
			message.setSummary("Por favor preencha o campo da quantidade.");
			message.setDetail("Por favor preencha o campo da quantidade.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			return false;
		} else {
			message.setSummary("Cadastro realizado com sucesso.");
			message.setDetail("Cadastro realizado com sucesso.");
			context.addMessage("formCadastrarIdentificacaoCaixa:msgTelaCaixa", message);
			return true;
		}

	}
	
	
	/**
	 * Metodo de autocomplete do input coposicao
	 * @throws Exception 
	 */
    public List<Produto> complemento(Object event) throws Exception{

      String prefixo = event.toString().toLowerCase();        
      List<Produto> retorno = new ArrayList<Produto>();
      listaProduto = produtoPresentationService.getService().list();
     
      new ArrayList<String>();
      
      for(int pos = 0; pos < listaProduto.size(); pos++){
    	  String id = String.valueOf(listaProduto.get(pos).getId());
    	  
    	  if( (id.toLowerCase().startsWith(prefixo))||(listaProduto.get(pos).getNome().toLowerCase().startsWith(prefixo)) ){
    		  retorno.add(this.listaProduto.get(pos));
          }
      }
      return retorno;
    }
       
    
    /**
     * Metodo que adiciona na lista de composicao da pagina de produto.
     */
	public void addListaProdutos() throws Exception {
		System.out.println(" ***  addListaProdutos  *** ");
		this.produtoLista = new Produto();
		
		String codigo = (String) this.composto.getNome().split(" - ")[0];
		String nome = (String) this.composto.getNome().split(" - ")[1];
		
		this.composto.setId(Integer.parseInt(codigo));
		this.composto.setNome(nome);
		
		this.produtoLista.setId(this.composto.getId());
		this.produtoLista.setNome(this.composto.getNome());
		
		//produto 
		this.composicao.setProduto(this.produto);
		
		//sao os produtos da composicao.
		this.composicao.setComposto(this.produtoLista);
		
		if(this.composicao!=null) {
			this.listaAutoComplete.add(this.composicao);
		}else {
			System.out.println("objeto vazio!!!");
			
		}
			
		setSessionListaAutoComplete(this.listaAutoComplete);
		this.clearFields();
	
	}
	
		
    /**
	 * Metodo que monta a lista de Produtos da Composicao
	 */
	public void setListaAutoComplete(List<Composicao> listaAutoComplete) throws Exception {
				
		this.listaAutoComplete = new ArrayList<Composicao>();
			
		for (Composicao composicao : listaAutoComplete) {
			System.out.println(" :: ??" + composicao.getProduto().getNome());
			this.listaAutoComplete.add(composicao);
		}
		//setSessionListaAutoComplete(this.listaAutoComplete);
	}
		
	
	public List<Composicao> getListaAutoComplete() {

		System.out.println("\n --------------------------- getListaAutoComplete ------------------------");
		System.out.println("getListaAutoComplete() :::: " + this.listaAutoComplete.size());
		System.out.println("\n -------------------------------------------------------------------------");

		return this.listaAutoComplete;

	}
	
	
	public void setSessionListaAutoComplete(List<Composicao> listaAutoComplete) {
		System.out.println(" setSessionListaAutoComplete \n");
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("listaAutoComplete", listaAutoComplete); 
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Composicao> getSessionListaAutoComplete() {
		System.out.println(" getSessionListaAutoComplete \n");
		List<Composicao> listaSessionAutoComplete = new ArrayList<Composicao>();
		listaSessionAutoComplete = (List<Composicao>) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("listaAutoComplete");
		return listaSessionAutoComplete;
	}
	
	
	public void removeSessionListaAutoComplete() {
		System.out.println("removeSessionListaAutoComplete \n");
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("listaAutoComplete"); 
	}
	
	
	public void removerProdutoDaLista(ActionEvent e) throws Exception{
		System.out.println("Entrou no adicionar remover ->>>>>>>> ");	
		if (table.getRowData() != null) {
			Composicao linha = (Composicao) table.getRowData();
			this.listaAutoComplete.remove(linha);
			//this.clearFields();
		}
		
	}
	
	public List<Composicao> getListaAutoCompleteById(int id) throws Exception {
		return composicaoPresentationService.getService().getByIdProduto(id);
	}
	

	//getter and setters..

produto.jsp

<f:view>
	<f:loadBundle basename="messages" var="msgs" />
	<a4j:form id="formCadastrarProduto">
	<a4j:loadScript src="/resources/jquery.maskedinput-1.2.1.js" />

	<rich:panel style="padding:0" headerClass="outpanelHeader">
        <f:facet name="header">
            <rich:spacer height="4" />
        </f:facet>
        <h2 align="center"><h:outputText value="Cadastro de Produtos" /></h2>
        <h:panelGrid columns="2" columnClasses="gridContent" border="0">
 	
 		
		<!-- PAINEL DE CADASTRO-->
		<rich:panel id="panelCadastrarProduto" header="#{msgs['produto.description']}" bodyClass="inpanelBody" style="width:100%">
			<h:panelGrid id="panelGridCadastroProduto" columns="1" width="100%">

				<h:panelGroup>
					<h:outputText value="#{msgs['page.label.codigo']}" /> 
					<h:inputText id="codigoProduto" value="#{produtoMB.produto.codigo}" required="false" maxlength="10">
						<f:validateLength maximum="10"/>	
					</h:inputText>
					<br/>
				
					&lt;h:outputText value="#{msgs['page.label.nome']}" /&gt;&nbsp;
					&lt;h:inputText id="nomeProduto" value="#{produtoMB.produto.nome}" required="false" maxlength="100"&gt;
						&lt;f:validateLength maximum="100"/&gt;	
					&lt;/h:inputText&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.nomeResumido']}" /&gt;&nbsp;
					&lt;h:inputText id="nomeResumidoProduto" value="#{produtoMB.produto.nomeResumido}" required="false" maxlength="100"&gt;
						&lt;f:validateLength maximum="15"/&gt;	
					&lt;/h:inputText&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.unidadeCompra']}" /&gt;&nbsp;
					&lt;h:inputText id="unidadeCompraProduto" value="#{produtoMB.produto.unidadeCompra}" required="false" maxlength="2"&gt;
						&lt;f:validateLength maximum="2" /&gt;	
					&lt;/h:inputText&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.unidadeVenda']}" /&gt;&nbsp;
					&lt;h:inputText id="unidadeVendaProduto" value="#{produtoMB.produto.unidadeVenda}" required="false" maxlength="2"&gt;
						&lt;f:validateLength maximum="2" /&gt;	
					&lt;/h:inputText&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.codigoBarras']}" /&gt;&nbsp;
					&lt;h:inputText id="codigoBarrasProduto" value="#{produtoMB.produto.codigoBarras}" required="false" maxlength="14" onkeypress='return SomenteNumero(event)'&gt;
						&lt;f:validateLength maximum="14" /&gt;	
					&lt;/h:inputText&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.composto']}" /&gt;&nbsp;
					&lt;h:selectBooleanCheckbox id="compostoProduto" value="#{produtoMB.produto.selecionadoComposto}" onclick="mostra(null);" /&gt;
					&lt;h:outputText value="#{produtoMB.produto.selecionadoComposto}" /&gt;
				
								&lt;div id="divComposicao"&gt;
									&lt;jsp:include page="composicao.jsp" /&gt;
								&lt;/div&gt;
								<br />

					&lt;h:outputText value="#{msgs['page.label.exibirPDV']}" /&gt;&nbsp;
					&lt;h:selectBooleanCheckbox id="exibirPDVProduto" value="#{produtoMB.produto.selecionadoExibirPDV}"/&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.grupo']}" /&gt;&nbsp;
					&lt;h:selectOneMenu id="grupoCombo" value="#{produtoMB.produto.grupo}" converter="grupoConverter"&gt;
						&lt;f:selectItems value="#{produtoMB.grupos}"/&gt;
					&lt;/h:selectOneMenu&gt;
					<br/>
					
					&lt;h:outputText value="#{msgs['page.label.fornecedor']}" /&gt;&nbsp;
					&lt;h:selectOneMenu id="fornecedorCombo" value="#{produtoMB.produto.fornecedor}" converter="fornecedorConverter"&gt;
						&lt;f:selectItems value="#{produtoMB.fornecedores}"/&gt;
					&lt;/h:selectOneMenu&gt;
					<br/>
								
					&lt;rich:spacer height="10" /&gt;
						&lt;rich:separator height="1" lineType="dotted" /&gt;
					&lt;rich:spacer height="10" /&gt;
					<br />
					
					&lt;rich:panel bodyClass="inpanelBody" style="width:250px"&gt;
						&lt;h:outputText value="#{msgs['page.label.quantidadeMinima']}" /&gt;&nbsp;
						&lt;h:inputText id="qtdMininaEstoque" value="#{produtoMB.produto.qtdeMinima}" required="false" maxlength="10" onkeypress='return SomenteNumero(event)'&gt;
								 &lt;f:validateLength maximum="10" /&gt;
						&lt;/h:inputText&gt;
						<br/>
					
						&lt;h:outputText value="#{msgs['page.label.quantidadeTotalEstoque']}" /&gt;&nbsp;
						&lt;h:outputText id="qtdTotalEstoque" value="#{produtoMB.estoque.qtdeTotalEstoque}"/&gt;
						<br/>
					&lt;/rich:panel&gt;
					<br/>

					&lt;rich:toolBar id="toolBarMessage" width="100%" height="30"
							itemSeparator="line"&gt;
							&lt;a4j:commandLink id="btnInsertProduto"
								reRender="tabelaListaProduto,panelGridCadastroProduto,formCadastrarComposicao"
								actionListener="#{produtoMB.insertAction}"
								rendered="#{not produtoMB.editable}"
								&gt;
								&lt;h:graphicImage style="border:0" url="/images/Save.gif" /&gt;
							&lt;/a4j:commandLink&gt;
							&lt;a4j:commandLink id="btnUpdateProduto"
								reRender="tabelaListaProduto,panelGridCadastroProduto"
								actionListener="#{produtoMB.updateAction}" rendered="false"
								binding="#{produtoMB.updateLink}"&gt;
								&lt;h:graphicImage style="border:0" url="/images/Edit.gif" /&gt;
							&lt;/a4j:commandLink&gt;
							&lt;a4j:commandLink id="btnCancelProduto"
								reRender="tabelaListaProduto,panelGridCadastroProduto"
								actionListener="#{produtoMB.cancelAction}"&gt;
								&lt;h:graphicImage style="border:0" url="/images/Cancel.gif" /&gt;
							&lt;/a4j:commandLink&gt;
						    &lt;a4j:commandLink id="btnEstoque"
						    				 reRender="tabelaListaProduto,panelGridCadastroProduto "
						    				 action="#{produtoMB.chamarEstoque}" 
						    				 value="#{msgs['page.label.estoque']}" 
						    				 rendered="false"
						    				 binding="#{produtoMB.estoqueLink}"&gt;
						    	&lt;f:param name="idProduto" value="#{produtoMB.produto.id}"/&gt;
						    	&lt;f:param name="nomeProduto" value="#{produtoMB.produto.nome}"/&gt;
						    	&lt;f:param name="qtdeTotalEstoque" value="#{produtoMB.estoque.qtdeTotalEstoque}"/&gt;
						    &lt;/a4j:commandLink&gt;
						    

							&lt;h:messages style="font-size:11px; color:red" /&gt;
						&lt;/rich:toolBar&gt;
					&lt;/h:panelGroup&gt;
				&lt;/h:panelGrid&gt;

			&lt;/rich:panel&gt;

			<br/>	
			
			
				&lt;!-- PAINEL DA LISTA --&gt;	
		&lt;rich:panel header="#{msgs['produto.title']}" style="width:100%"&gt;
			&lt;rich:dataTable binding="#{produtoMB.table}"
							onRowMouseOver="this.style.backgroundColor='#F8F8F8'"
							onRowMouseOut="this.style.backgroundColor='#{org.richfaces.SKIN.tableBackgroundColor}'"
							onRowClick="this.style.backgroundColor='#F1F1F1'" rows="10"
							width="100%" id="tabelaListaProduto" value="#{produtoMB.lista}"
							var="resultado"&gt;

				&lt;rich:column&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="#{msgs['page.label.codigo']}" /&gt;
					&lt;/f:facet&gt;
					&lt;h:outputText value="#{resultado.codigo}" /&gt;
				&lt;/rich:column&gt;
				
				&lt;rich:column&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="#{msgs['page.label.nome']}" /&gt;
					&lt;/f:facet&gt;
					&lt;h:outputText value="#{resultado.nome}" /&gt;
				&lt;/rich:column&gt;
				
				&lt;rich:column&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="#{msgs['page.label.grupo']}" /&gt;
					&lt;/f:facet&gt;
					&lt;h:outputText value="#{resultado.grupo}" /&gt;
				&lt;/rich:column&gt;
				
				&lt;rich:column&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="#{msgs['page.label.fornecedor']}" /&gt;
					&lt;/f:facet&gt;
					&lt;h:outputText value="#{resultado.fornecedor}" /&gt;
				&lt;/rich:column&gt;
				
				&lt;rich:column&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="selecionado" /&gt;
					&lt;/f:facet&gt;
					&lt;h:outputText value="#{resultado.composto}" /&gt;
				&lt;/rich:column&gt;
				
				
				&lt;rich:column style="text-align:center"&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="#{msgs['page.table.alterar']}" /&gt;
					&lt;/f:facet&gt;
					&lt;a4j:commandLink reRender="panelGridCadastroProduto,panelGridAdionarComposicao,panelGridCadastroComposicao"
									 actionListener="#{produtoMB.editAction}"
									 onclick="mostra(#{resultado.composto});"
									&gt;
									 &lt;h:graphicImage style="border:0" url="/images/Edit.gif" /&gt;
					&lt;/a4j:commandLink&gt;
				&lt;/rich:column&gt;
				
				&lt;rich:column style="text-align:center"&gt;
					&lt;f:facet name="header"&gt;
						&lt;h:outputText value="#{msgs['page.table.excluir']}" /&gt;
					&lt;/f:facet&gt;
					&lt;a4j:commandLink reRender="tabelaListaProduto,panelGridCadastroProduto"
									 actionListener="#{produtoMB.deleteAction}"
									 onclick="if(confirm('Confirma exclusão do registro?') == false )  return false;"&gt;
									 &lt;h:graphicImage style="border:0" url="/images/Delete.gif" /&gt;
					&lt;/a4j:commandLink&gt;
				&lt;/rich:column&gt;
				
				
				&lt;f:facet name="footer"&gt;
					&lt;rich:datascroller /&gt;					
				&lt;/f:facet&gt;

			&lt;/rich:dataTable&gt;
				
		&lt;/rich:panel&gt;
		<br>	
		
		&lt;/h:panelGrid&gt;
		&lt;/rich:panel&gt;
			
	&lt;/a4j:form&gt;
 
&lt;/f:view&gt;

composicao.jsp

&lt;f:subview id="Composicao"&gt;
&lt;a4j:form id="formCadastrarComposicao"&gt;
	&lt;a4j:loadScript src="/resources/tableInsertDeleteRow.js" /&gt;
	&lt;a4j:loadScript src="/resources/jquery-1.3.2.js.js" /&gt;
	&lt;f:loadBundle basename="messages" var="msgs" /&gt;
	

		&lt;h:panelGrid columns="2" columnClasses="gridContent" border="2" id="panelGridCadastroComposicao" width="100%"&gt;
			&lt;h:panelGroup&gt;



				&lt;rich:panel bodyClass="inpanelBody" style="width:100%"&gt;
					&lt;f:facet name="header"&gt;
                    Adionando Insumos
                &lt;/f:facet&gt;

					&lt;h:panelGrid columns="5" style="width:100%" id="panelGridAdionarComposicao"&gt;
						&lt;h:outputText value="Nome:" /&gt;
						&lt;h:inputText   id="nomeProduto" value="#{composicaoMB.composto.nome}" /&gt;
						&lt;h:outputText value="Quantidade:" /&gt;
						&lt;h:inputText   id="qtdeProduto" value="#{composicaoMB.composicao.quantidade}" /&gt;

									
						&lt;rich:suggestionbox id="suggestionBoxNome" for="nomeProduto"
							suggestionAction="#{composicaoMB.complemento}" width="200"
							height="150" var="resultado"
							&gt;
							&lt;h:column&gt;
								&lt;h:outputText value="#{resultado.id} - #{resultado.nome}" /&gt;
							&lt;/h:column&gt;
						&lt;/rich:suggestionbox&gt;
						
						
						&lt;a4j:commandButton id="btnAdd" 
										   value="Adicionar" action="#{composicaoMB.addListaProdutos}" reRender="panelGridCadastroComposicao" &gt;
						&lt;/a4j:commandButton&gt;
					&lt;/h:panelGrid&gt;
					<br />
					&lt;table border="0" cellspacing="1" id="tblInsumos"&gt;
						&lt;tbody&gt;
						&lt;/tbody&gt;
					&lt;/table&gt;

				&lt;/rich:panel&gt;
				&lt;rich:panel bodyClass="inpanelBody" style="width:100%" id="painelListaComposicao"&gt;
					&lt;f:facet name="header"&gt;
                    Lista de Insumos
                &lt;/f:facet&gt;
					&lt;rich:dataTable binding="#{composicaoMB.table}"
						onRowMouseOver="this.style.backgroundColor='#F8F8F8'"
						onRowMouseOut="this.style.backgroundColor='#{org.richfaces.SKIN.tableBackgroundColor}'"
						onRowClick="this.style.backgroundColor='#F1F1F1'" rows="10"
						width="100%" id="tabelaListaComposicao"
						value="#{composicaoMB.sessionListaAutoComplete}" var="resultado"&gt;

						&lt;rich:column&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Produto" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{resultado.composto.nome}" /&gt;
						&lt;/rich:column&gt;
						&lt;rich:column style="text-align:center"&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="Quantidade" /&gt;
							&lt;/f:facet&gt;
							&lt;h:outputText value="#{resultado.quantidade}" /&gt;
						&lt;/rich:column&gt;
						&lt;rich:column style="text-align:center"&gt;
							&lt;f:facet name="header"&gt;
								&lt;h:outputText value="remover" /&gt;
							&lt;/f:facet&gt;
							&lt;a4j:commandLink id="btnRemoverComposicao"
								reRender="tabelaListaComposicao,panelGridCadastroComposicao"
								actionListener="#{composicaoMB.removerProdutoDaLista}"
								onclick="if(confirm('Confirma exclusão do registro?') == false )  return false;"&gt;
									 &lt;h:graphicImage style="border:0" url="/images/Delete.gif" /&gt;
							&lt;/a4j:commandLink&gt;
						&lt;/rich:column&gt;
					&lt;/rich:dataTable&gt;
				&lt;/rich:panel&gt;
				
				<br/>
				
			&lt;/h:panelGroup&gt;
		&lt;/h:panelGrid&gt;

&lt;/a4j:form&gt;
&lt;/f:subview&gt;

O problema é o seguinte: inserindo um produto com composicao funciona normalmente, mas qd eu clicava em alterar produto nao conseguia recuperar os dados da lista de composicao. Resolvi isso chogando na sessao… a lista. Contudo, o botao de adicionar composicao nao funciona… composicaoMB.addListaProdutos, parece q nao tem acao nenhuma nele…
Oq pode esta acontecendo???

antes eu fazei assim… utilizava o botao: composicaoMB.addListaProdutos, e a listagem eu trazia: composicaoMB.listaAutoComplete so q so fucionava a insercao a alteracao tinha q ser produtoMB.composicaoManager.listaAutoComplete

nao sei pq ele so lia a lista assim, mas td na sessao resolveu parcialmente…
sera q tem algo haver com isso o fato do metodo estar num manager e ele estar tentando acessar de outro jeito??

galera to confunsa… se algume tiver passado por isso…
Help me please!!!
URGENTE…

bjs a todos… :roll:

Criado 1 de outubro de 2009
Respostas 0
Participantes 1