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/>
<h:outputText value="#{msgs['page.label.nome']}" />
<h:inputText id="nomeProduto" value="#{produtoMB.produto.nome}" required="false" maxlength="100">
<f:validateLength maximum="100"/>
</h:inputText>
<br/>
<h:outputText value="#{msgs['page.label.nomeResumido']}" />
<h:inputText id="nomeResumidoProduto" value="#{produtoMB.produto.nomeResumido}" required="false" maxlength="100">
<f:validateLength maximum="15"/>
</h:inputText>
<br/>
<h:outputText value="#{msgs['page.label.unidadeCompra']}" />
<h:inputText id="unidadeCompraProduto" value="#{produtoMB.produto.unidadeCompra}" required="false" maxlength="2">
<f:validateLength maximum="2" />
</h:inputText>
<br/>
<h:outputText value="#{msgs['page.label.unidadeVenda']}" />
<h:inputText id="unidadeVendaProduto" value="#{produtoMB.produto.unidadeVenda}" required="false" maxlength="2">
<f:validateLength maximum="2" />
</h:inputText>
<br/>
<h:outputText value="#{msgs['page.label.codigoBarras']}" />
<h:inputText id="codigoBarrasProduto" value="#{produtoMB.produto.codigoBarras}" required="false" maxlength="14" onkeypress='return SomenteNumero(event)'>
<f:validateLength maximum="14" />
</h:inputText>
<br/>
<h:outputText value="#{msgs['page.label.composto']}" />
<h:selectBooleanCheckbox id="compostoProduto" value="#{produtoMB.produto.selecionadoComposto}" onclick="mostra(null);" />
<h:outputText value="#{produtoMB.produto.selecionadoComposto}" />
<div id="divComposicao">
<jsp:include page="composicao.jsp" />
</div>
<br />
<h:outputText value="#{msgs['page.label.exibirPDV']}" />
<h:selectBooleanCheckbox id="exibirPDVProduto" value="#{produtoMB.produto.selecionadoExibirPDV}"/>
<br/>
<h:outputText value="#{msgs['page.label.grupo']}" />
<h:selectOneMenu id="grupoCombo" value="#{produtoMB.produto.grupo}" converter="grupoConverter">
<f:selectItems value="#{produtoMB.grupos}"/>
</h:selectOneMenu>
<br/>
<h:outputText value="#{msgs['page.label.fornecedor']}" />
<h:selectOneMenu id="fornecedorCombo" value="#{produtoMB.produto.fornecedor}" converter="fornecedorConverter">
<f:selectItems value="#{produtoMB.fornecedores}"/>
</h:selectOneMenu>
<br/>
<rich:spacer height="10" />
<rich:separator height="1" lineType="dotted" />
<rich:spacer height="10" />
<br />
<rich:panel bodyClass="inpanelBody" style="width:250px">
<h:outputText value="#{msgs['page.label.quantidadeMinima']}" />
<h:inputText id="qtdMininaEstoque" value="#{produtoMB.produto.qtdeMinima}" required="false" maxlength="10" onkeypress='return SomenteNumero(event)'>
<f:validateLength maximum="10" />
</h:inputText>
<br/>
<h:outputText value="#{msgs['page.label.quantidadeTotalEstoque']}" />
<h:outputText id="qtdTotalEstoque" value="#{produtoMB.estoque.qtdeTotalEstoque}"/>
<br/>
</rich:panel>
<br/>
<rich:toolBar id="toolBarMessage" width="100%" height="30"
itemSeparator="line">
<a4j:commandLink id="btnInsertProduto"
reRender="tabelaListaProduto,panelGridCadastroProduto,formCadastrarComposicao"
actionListener="#{produtoMB.insertAction}"
rendered="#{not produtoMB.editable}"
>
<h:graphicImage style="border:0" url="/images/Save.gif" />
</a4j:commandLink>
<a4j:commandLink id="btnUpdateProduto"
reRender="tabelaListaProduto,panelGridCadastroProduto"
actionListener="#{produtoMB.updateAction}" rendered="false"
binding="#{produtoMB.updateLink}">
<h:graphicImage style="border:0" url="/images/Edit.gif" />
</a4j:commandLink>
<a4j:commandLink id="btnCancelProduto"
reRender="tabelaListaProduto,panelGridCadastroProduto"
actionListener="#{produtoMB.cancelAction}">
<h:graphicImage style="border:0" url="/images/Cancel.gif" />
</a4j:commandLink>
<a4j:commandLink id="btnEstoque"
reRender="tabelaListaProduto,panelGridCadastroProduto "
action="#{produtoMB.chamarEstoque}"
value="#{msgs['page.label.estoque']}"
rendered="false"
binding="#{produtoMB.estoqueLink}">
<f:param name="idProduto" value="#{produtoMB.produto.id}"/>
<f:param name="nomeProduto" value="#{produtoMB.produto.nome}"/>
<f:param name="qtdeTotalEstoque" value="#{produtoMB.estoque.qtdeTotalEstoque}"/>
</a4j:commandLink>
<h:messages style="font-size:11px; color:red" />
</rich:toolBar>
</h:panelGroup>
</h:panelGrid>
</rich:panel>
<br/>
<!-- PAINEL DA LISTA -->
<rich:panel header="#{msgs['produto.title']}" style="width:100%">
<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">
<rich:column>
<f:facet name="header">
<h:outputText value="#{msgs['page.label.codigo']}" />
</f:facet>
<h:outputText value="#{resultado.codigo}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msgs['page.label.nome']}" />
</f:facet>
<h:outputText value="#{resultado.nome}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msgs['page.label.grupo']}" />
</f:facet>
<h:outputText value="#{resultado.grupo}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="#{msgs['page.label.fornecedor']}" />
</f:facet>
<h:outputText value="#{resultado.fornecedor}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="selecionado" />
</f:facet>
<h:outputText value="#{resultado.composto}" />
</rich:column>
<rich:column style="text-align:center">
<f:facet name="header">
<h:outputText value="#{msgs['page.table.alterar']}" />
</f:facet>
<a4j:commandLink reRender="panelGridCadastroProduto,panelGridAdionarComposicao,panelGridCadastroComposicao"
actionListener="#{produtoMB.editAction}"
onclick="mostra(#{resultado.composto});"
>
<h:graphicImage style="border:0" url="/images/Edit.gif" />
</a4j:commandLink>
</rich:column>
<rich:column style="text-align:center">
<f:facet name="header">
<h:outputText value="#{msgs['page.table.excluir']}" />
</f:facet>
<a4j:commandLink reRender="tabelaListaProduto,panelGridCadastroProduto"
actionListener="#{produtoMB.deleteAction}"
onclick="if(confirm('Confirma exclusão do registro?') == false ) return false;">
<h:graphicImage style="border:0" url="/images/Delete.gif" />
</a4j:commandLink>
</rich:column>
<f:facet name="footer">
<rich:datascroller />
</f:facet>
</rich:dataTable>
</rich:panel>
<br>
</h:panelGrid>
</rich:panel>
</a4j:form>
</f:view>
composicao.jsp
<f:subview id="Composicao">
<a4j:form id="formCadastrarComposicao">
<a4j:loadScript src="/resources/tableInsertDeleteRow.js" />
<a4j:loadScript src="/resources/jquery-1.3.2.js.js" />
<f:loadBundle basename="messages" var="msgs" />
<h:panelGrid columns="2" columnClasses="gridContent" border="2" id="panelGridCadastroComposicao" width="100%">
<h:panelGroup>
<rich:panel bodyClass="inpanelBody" style="width:100%">
<f:facet name="header">
Adionando Insumos
</f:facet>
<h:panelGrid columns="5" style="width:100%" id="panelGridAdionarComposicao">
<h:outputText value="Nome:" />
<h:inputText id="nomeProduto" value="#{composicaoMB.composto.nome}" />
<h:outputText value="Quantidade:" />
<h:inputText id="qtdeProduto" value="#{composicaoMB.composicao.quantidade}" />
<rich:suggestionbox id="suggestionBoxNome" for="nomeProduto"
suggestionAction="#{composicaoMB.complemento}" width="200"
height="150" var="resultado"
>
<h:column>
<h:outputText value="#{resultado.id} - #{resultado.nome}" />
</h:column>
</rich:suggestionbox>
<a4j:commandButton id="btnAdd"
value="Adicionar" action="#{composicaoMB.addListaProdutos}" reRender="panelGridCadastroComposicao" >
</a4j:commandButton>
</h:panelGrid>
<br />
<table border="0" cellspacing="1" id="tblInsumos">
<tbody>
</tbody>
</table>
</rich:panel>
<rich:panel bodyClass="inpanelBody" style="width:100%" id="painelListaComposicao">
<f:facet name="header">
Lista de Insumos
</f:facet>
<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">
<rich:column>
<f:facet name="header">
<h:outputText value="Produto" />
</f:facet>
<h:outputText value="#{resultado.composto.nome}" />
</rich:column>
<rich:column style="text-align:center">
<f:facet name="header">
<h:outputText value="Quantidade" />
</f:facet>
<h:outputText value="#{resultado.quantidade}" />
</rich:column>
<rich:column style="text-align:center">
<f:facet name="header">
<h:outputText value="remover" />
</f:facet>
<a4j:commandLink id="btnRemoverComposicao"
reRender="tabelaListaComposicao,panelGridCadastroComposicao"
actionListener="#{composicaoMB.removerProdutoDaLista}"
onclick="if(confirm('Confirma exclusão do registro?') == false ) return false;">
<h:graphicImage style="border:0" url="/images/Delete.gif" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>
</rich:panel>
<br/>
</h:panelGroup>
</h:panelGrid>
</a4j:form>
</f:subview>
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: