Boa noite pessoal,
Estou construindo um aplicativo utilizando RichFaces e quando pressiono o botão abaixo o comando está sendo executando duas vezes (o que não deveria acontecer), esse botão adiciona um objeto ItemVenda dentro de um ArrayList. Não consegui descobrir o que está ocorrendo.
Botão:
<a4j:commandButton value="Adicionar" action="#{venda.venda.adicionarItem}" reRender="entradaProdTable,panelProd,panelVlrQtde,totalDesc"/>
A página xhtml é meio extensa, mas segue abaixo:
<?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">
<ui:composition 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:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich" template="../template/template.xhtml" >
<ui:define name="title">
Venda de Produtos
</ui:define>
<ui:define name="body">
<h:panelGrid width="500px">
<rich:messages></rich:messages>
<rich:panel>
<h:form id="clienteForm">
<h:panelGrid columns="2">
<h:outputText value="Cliente:" />
<h:panelGrid columns="4" border="0" cellpadding="0" cellspacing="0" >
<h:inputText style="margin:0px;" id="inputCliente" size="28"/>
<h:graphicImage value="../images/note_view.gif"
onclick="#{rich:component('suggestionCli')}.callSuggestion(true)"
alt="" />
<a4j:commandLink ajaxSingle="true" id="addCliente"
oncomplete="#{rich:component('incluirClientePanel')}.show()" >
<h:graphicImage value="../images/edit.gif" style="border:0" />
</a4j:commandLink>
<rich:toolTip for="addCliente" value="Incluir Novo Cliente" />
</h:panelGrid>
</h:panelGrid>
<rich:suggestionbox height="200" width="200" for="inputCliente"
usingSuggestObjects="true" suggestionAction="#{cliente.autocomplete}" var="cli"
fetchValue="#{cli.nome}" id="suggestionCli" >
<h:column>
<h:outputText value="#{cli.nome}" />
</h:column>
<a4j:support event="onselect" reRender="ponto">
<f:setPropertyActionListener value="#{cli}" target="#{venda.venda.cliente}" />
<f:setPropertyActionListener value="#{loginBean.func}" target="#{venda.venda.funcionario}" />
</a4j:support>
</rich:suggestionbox>
<h:panelGrid columns="2">
<h:outputText value="Produto:" />
<h:panelGrid columns="4" border="0" cellpadding="0" cellspacing="0" >
<h:inputText style="margin:0px;" id="inputProduto" size="27"/>
<h:graphicImage value="../images/note_view.gif"
onclick="#{rich:component('suggestionProd')}.callSuggestion(true)"
alt="" />
<a4j:commandLink ajaxSingle="true" id="addProduto"
oncomplete="#{rich:component('incluirProdutoPanel')}.show()" >
<h:graphicImage value="../images/edit.gif" style="border:0" />
</a4j:commandLink>
<rich:toolTip for="addProduto" value="Incluir Novo Produto" />
</h:panelGrid>
</h:panelGrid>
<rich:suggestionbox height="200" width="200" for="inputProduto"
usingSuggestObjects="true" suggestionAction="#{produto.autocomplete}" var="produ"
fetchValue="#{produ.nome}" id="suggestionProd" >
<h:column>
<h:outputText value="#{produ.nome}" />
</h:column>
<a4j:support event="onselect" ajaxSingle="true" reRender="panelProd">
<f:setPropertyActionListener value="#{produ}" target="#{venda.venda.itemVenda.produto}" />
</a4j:support>
</rich:suggestionbox>
</h:form>
</rich:panel>
<ui:include src="../gerenciamento/modalIncluirCliente.xhtml" />
<rich:panel>
<ui:include src="../gerenciamento/modalIncluirProduto.xhtml" />
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Data da Venda:" />
<a4j:outputPanel layout="block">
<rich:calendar value="#{venda.venda.dataVenda}"
popup="true"
locale="#{venda.venda.locale}"
datePattern="dd/MM/yyyy"
showApplyButton="false" cellWidth="24px"
cellHeight="22px" style="width:200px"
id="calendario"
/>
</a4j:outputPanel>
</h:panelGrid>
<h:panelGrid columns="3" id="panelProd" bgcolor="#DCDCDC" width="500px" border="0" rowClasses="row1, row2">
<h:outputText value="Produto" style="font-weight:bold;"/>
<h:outputText value="Descrição" style="font-weight:bold;"/>
<h:outputText value="Laboratório" style="font-weight:bold;"/>
<h:outputText value="#{venda.venda.itemVenda.produto.nome}" />
<h:outputText value="#{venda.venda.itemVenda.produto.descricao}" />
<h:outputText value="#{venda.venda.itemVenda.produto.laboratorio}" />
</h:panelGrid>
<h:panelGrid columns="2" id="panelVlrQtde">
<h:outputText value="Quantidade:" />
<h:inputText value="#{venda.venda.itemVenda.quantidade}" id="quantidade" required="true">
<f:validateLength minimum="1" maximum="10" />
</h:inputText>
<a4j:commandButton value="Adicionar" action="#{venda.venda.adicionarItem}" reRender="entradaProdTable,panelProd,panelVlrQtde,totalDesc"/>
</h:panelGrid>
<h:panelGrid>
<rich:dataTable id="entradaProdTable" value="#{venda.venda.listaItemVenda}" var="itemVenda" columnClasses="center" width="500px">
<rich:column sortBy="#{itemVenda.produto.nome}">
<f:facet name="header">
<h:outputText value="Produto"/>
</f:facet>
<h:outputText value="#{itemVenda.produto.nome}"/>
</rich:column>
<rich:column sortBy="#{itemVenda.produto.valorVenda}">
<f:facet name="header">
<h:outputText value="Valor Compra (unid)"/>
</f:facet>
<h:outputText value="#{itemVenda.produto.valorVenda}"/>
</rich:column>
<rich:column sortBy="#{itemVenda.quantidade}">
<f:facet name="header">
<h:outputText value="Quantidade"/>
</f:facet>
<h:outputText value="#{itemVenda.quantidade}"/>
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Valor Total"/>
</f:facet>
<h:outputText value="#{itemVenda.valorTotal}"/>
</rich:column>
</rich:dataTable>
</h:panelGrid>
<h:panelGrid columns="2" id="totalDesc" width="170px">
<h:outputText value="Desconto:" style="font-weight:bold;"/>
<h:outputText value="#{venda.venda.cliente.pontos}" id="pontos" />
<h:outputText value="Valor Total" style="font-weight:bold;"/>
<h:outputText value="#{venda.venda.valorTotalVenda}" />
</h:panelGrid>
<h:panelGrid columns="2">
<h:outputText value="Forma de Pagamento:" />
<h:selectOneMenu value="#{venda.venda.formaPagto}" id="formaPgto">
<f:selectItem itemValue="A Vista" itemLabel="À Vista"/>
<f:selectItem itemValue="Cartao de Credito" itemLabel="Cartão de Crédito"/>
<f:selectItem itemValue="Cartao de Debito" itemLabel="Cartão de Débito"/>
</h:selectOneMenu>
</h:panelGrid>
</h:form>
</rich:panel>
<p align="right">
<h:form>
<a4j:commandButton value="Salvar" action="#{venda.salvar}" />
</h:form>
</p>
</h:panelGrid>
</ui:define>
</ui:composition>
Desde já agradeço mais uma vez a ajuda.
Valeu!
