rowSelect do ajax não executa metodo

3 respostas
A

Estou tentando executar um método com o seguinte código ajax:

<p:ajax event="rowSelect" immediate="true" listener="#{solicitacaoCompraBean.aoSelecionarItemProjeto}" oncomplete="buscarItensProjeto.hide()" update=":solicitacaoCompraGerenciador" process="@this"/>

quero executar um método em solicitacaocompra o método é esse:

public void aoSelecionarItemProjeto(SelectEvent e) {
        System.out.println("entrou no selecionar item projeto");
        itensProjeto = (ItensProjeto) e.getObject();
        descricao = itensProjeto.getDescricao();
       
    }

porem ao selecionar um item da minha tabela:

<p:dialog header="Buscar Itens Projeto" widgetVar="buscarItensProjeto" width="550" resizable="false">
            <h:form id="formItensProjeto">
                <p:dataTable value="#{solicitacaoCompraBean.itensProjetos}" id="ProjUsuarios"  var="i" paginator="true"  rows="3" selectionMode="single" 
                             selection="#{solicitacaoCompraBean.itensProjeto}" rowKey="#{i.id}"
                             emptyMessage="Nenhum projeto encontrado">

                    <p:ajax event="rowSelect" immediate="true" listener="#{solicitacaoCompraBean.aoSelecionarItemProjeto}" oncomplete="buscarItensProjeto.hide()" update=":solicitacaoCompraGerenciador" process="@this"/>

                    <p:column headerText="Projeto">
                        <h:outputText value="#{i.item}"/>
                    </p:column>
                    <p:column headerText="Descrição">
                        <h:outputText value="#{i.descricao}"/>
                    </p:column>               

                </p:dataTable>
            </h:form>
        </p:dialog>

simplesmente não entra no método, como vocês podem perceber no método aoSelecionarItemProjeto em um system.out.println fiz um ele para ver se realmente ao selecionar no dialog ele entraria no método e não entro, alguma ideia de como consigo que o ajax entre no método do bean?
Lembrando que tenho outro código utilizando o ajax da mesma maneira e não tive problemas, mais com essa tela não está funcionando.
Gostaria de agradecer já a ajuda.

3 Respostas

A

Percebi que não é so o ajax que não acesso meu bean, o meu botão salvar também não acessa, simplesmente não entra nos métodos do bean

bean:

public void salvarPainel(ActionEvent event) {
        iitenSolicitacaoCompra.setDescricao(descricao);
        iitenSolicitacaoCompra.setValor(paineis.size());
        System.out.println("------------" + solicitacaoCompra.getId());
        iitenSolicitacaoCompra.setSolicitacaoCompra(solicitacaoCompra);
        iitenSolicitacaoCompra.setItensProjeto(itensProjeto);
        iitenSolicitacaoCompra.setDataCadastrada(new Date());
        iitenSolicitacaoCompra.setValorOrcado(BigDecimal.valueOf(Double.parseDouble(valor.replace("R$ ", "").replace(".", "").replace(",", "."))));
        itenSolicitacaoCompraFacade.salvar(iitenSolicitacaoCompra);



        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso", "O Item foi salvo!");
        FacesContext.getCurrentInstance().addMessage(null, msg);

        paineis = new ArrayList<ItenSolicitacaoCompra>();
        paineis = itenSolicitacaoCompraFacade.consultaPainelSolicitacao(solicitacaoCompra);
        iitenSolicitacaoCompra = new ItenSolicitacaoCompra();

Interface:

<c:forEach id="for" items="#{solicitacaoCompraBean.paineis}" var="p" >
                <p:panel id="painelItenProj" header="#{p.painel} #{p.itensProjeto == null and p.solicitacaoCompra == null ? solicitacaoCompraBean.paineis.size() : p.valor} #{p.itensProjeto == null and p.solicitacaoCompra == null ? ' - Atenção item não finalizado!':''}" toggleable="true" toggleSpeed="100" closable="#{p.itensProjeto.id == null ? true:false}" closeSpeed="100" style="margin-left: -0.7em"
                         collapsed="#{p.itensProjeto.id == null and p.solicitacaoCompra.id == null or solicitacaoCompraBean.painel == false ? false:true}">
                    <p:ajax event="close" listener="#{solicitacaoCompraBean.fecharPainel}" update=":growl" />  

                    <p:graphicImage rendered="#{p.itensProjeto.id != null and p.solicitacaoCompra.id != null}" id="img#{p.valor+1}" value="../../imagens-css/images/resumo.png" style="cursor: pointer;width: 4em;height: 4.3em;" />
                    <p:overlayPanel for="img#{p.valor+1}" showEffect="blind" hideEffect="fade" showEvent="mouseover">
                        <h:panelGrid columns="2">
                            <h:outputLabel value="Valor Est: "/>
                            <h:outputText value="#{p.itensProjeto.id == null and p.solicitacaoCompra.id == null ? solicitacaoCompraBean.mascaraDinheiro(solicitacaoCompraBean.itensProjeto.valorEstimado):solicitacaoCompraBean.mascaraDinheiro(p.itensProjeto.valorEstimado)}"/>

                            <h:outputLabel value="Sub. Total: "/>
                            <h:outputText value="- #{solicitacaoCompraBean.subTotalConta(event, p.quantidade, p.valorOrcado)}"/>
                        </h:panelGrid> 
                        <hr/>
                        <h:panelGrid columns="2">
                            <h:outputLabel value="Valor Est. Real: "/>
                            <h:outputText  value="#{solicitacaoCompraBean.subtrair(p.valorOrcado, p.itensProjeto.valorEstimado,p.quantidade)}" style="color: green"/>

                        </h:panelGrid>
                    </p:overlayPanel>

                    <h:panelGrid columns="#{p.solicitacaoCompra.id == null? '4':'3'}">
                        <h:outputLabel value="Item Proj* " style="font-weight: bold"/>
                        <p:inputText disabled="true" id="itemProj#{p.valor+1}" label="responsavel" required="true" value="#{p.solicitacaoCompra.id == null ? solicitacaoCompraBean.itensProjeto.item:p.itensProjeto.item}" size="30">
                            <f:ajax event="blur" render="it#{p.valor+1}"/>
                        </p:inputText>
                        <p:message id="it#{p.valor+1}" for="itemProj#{p.valor+1}" display="icon"/>
                        <p:commandButton value="Buscar" oncomplete="buscarItensProjeto.show();" icon="ui-icon-search" update=":formItensProjeto"
                                         rendered="#{p.solicitacaoCompra.id == null}"/>  

                    </h:panelGrid>

                    <h:panelGrid columns="3">
                        <h:outputLabel value="Quantidade: " style="font-weight: bold"/>
                        <p:inputText value="#{p.quantidade}"/>
                        <h:outputText/>

                        <h:outputLabel value="Valor Orçado: " style="font-weight: bold" rendered="#{p.solicitacaoCompra.id == null and p.itensProjeto.id == null}"/>
                        <p:inputText id="ocamento#{p.valor+1}" value="#{solicitacaoCompraBean.valor}" title="Ex: 1000,23" rendered="#{p.solicitacaoCompra.id == null and p.itensProjeto.id == null}">
                            <f:ajax  render="ocamento#{p.valor+1}" listener="#{solicitacaoCompraBean.formata(valor)}"/>
                        </p:inputText>

                        <h:outputLabel value="Valor Orçado: " style="font-weight: bold" rendered="#{p.solicitacaoCompra.id != null and p.itensProjeto.id != null}"/>
                        <h:outputText  value="#{solicitacaoCompraBean.mascaraDinheiro(p.valorOrcado)}" rendered="#{p.solicitacaoCompra.id != null and p.itensProjeto.id != null}" title="Ex: 1000,23"/>
                        <h:outputText/>

                        <h:outputLabel value="Valor Estimado Item: " style="font-weight: bold"/>
                        <h:outputText id="valorEstimado#{p.valor+1}" value="#{solicitacaoCompraBean.mascaraDinheiro(p.itensProjeto.valorEstimado)}" rendered="#{p.solicitacaoCompra.id != null and p.itensProjeto.id != null}" title="Ex: 1000,23"/>

                        <p:inputText value="#{solicitacaoCompraBean.mascaraDinheiro(solicitacaoCompraBean.itensProjeto.valorEstimado)}" rendered="#{p.solicitacaoCompra.id == null and p.itensProjeto.id == null}" title="Ex: 1000,23" disabled="true"/>
                        <h:outputText/>


                        <h:outputLabel value="Desc. Material: " style="font-weight: bold"/>
                        <p:inputTextarea id="descMaterial#{p.valor+1}" value="#{p.solicitacaoCompra.id == null and p.itensProjeto.id == null? solicitacaoCompraBean.descricao: p.descricao}" rows="3" cols="40"/>
                        <h:outputText/>

                        <h:outputLabel value="Data Sugerida: " style="font-weight: bold"/>
                        <p:calendar value="#{p.dataSugeridaEntrega}" readonlyInput="true"  mindate="#{login.data}" pattern="dd/MM/yyyy"/>
                        <h:outputText/>

                        <h:outputLabel value="Finalidade: " style="font-weight: bold"/>
                        <p:inputTextarea id="finalidade#{p.valor+1}" value="#{p.finalidade}" rows="3" cols="40"/>
                        <h:outputText/>
                    </h:panelGrid>

                    <p:separator style="width: 80%" rendered="#{p.solicitacaoCompra.id == null and p.itensProjeto.id == null ? true:false}"/>

                    <p:commandButton value="Salvar Item" icon="ui-icon-disk"  actionListener="#{solicitacaoCompraBean.salvarPainel}" rendered="#{p.itensProjeto == null and p.solicitacaoCompra == null ? true:false}" update="solicitacaoCompraGerenciador :growl"/>
                    <p:commandButton value="Cancelar" icon="ui-icon-cancel"  actionListener="#{solicitacaoCompraBean.fecharPainel}" rendered="#{p.itensProjeto == null and p.solicitacaoCompra == null ? true:false}" update="solicitacaoCompraGerenciador :growl"/>
                </p:panel>
            </c:forEach>
        </h:form>
A

Já tentei utilizar o immediate, já tentei criar outro método mais mesmo assim não funcionou.

A

descobri o problema é o for each:

<c:forEach id="for" items="#{solicitacaoCompraBean.paineis}" var="p" >

removi ele e funcionou normal, porem necessito dele, algum ideia de algum componente que posso usar para substituir o for each da inteface?

Criado 13 de março de 2014
Ultima resposta 18 de mar. de 2014
Respostas 3
Participantes 1