RichFaces + A4j - CommandButton executado duas vezes

0 respostas
W

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!
:wink:

Criado 3 de julho de 2010
Respostas 0
Participantes 1