Problema <a4j:commandLink> [RESOLVIDO]

9 respostas
L

Tenho o seguinte trecho de código.

<rich:column styleClass="coluna">
         <h:form>
                <a4j:commandLink id="btnAlterar" execute="@this" action="#{cargoBean.preparaAlterarCargo()}" onclick="#{rich:component('alteracargo')}.show()">
                        <h:graphicImage value="/images/edit.gif" title="Alterar"/>
                </a4j:commandLink>
                <a4j:commandLink id="btnExcluir" execute="@this" action="#{cargoBean.excluir()}" onclick="return excluir();" render=":frmCargos:tabela :msg" >
                       <h:graphicImage value="/images/delete.gif" title="Excluir"/>
                </a4j:commandLink>
           </h:form>
</rich:column>

É exibida a tabela com os botões de excluir e alterar. No botão excluir, o mesmo funciona na primeira vez, porém na segunda não mais, na terceira voltar a funcionar. Pelo que puder perceber nos momentos em que não funciona, o action não é chamado. Alguém talvez já teve algo parecido? Alguma dica?

Ah, utilizo RichFaces 4.1. Grato.

9 Respostas

R

E ai LeonardoU tenta mudar onde esta seu form coloca ele envolvendo eu tablePanel. E testa!!!

Acho que isso pode resolver seu problema.

H

Outra coisa a verificar é, veja se o seu botão está a fazer a chamada como Ajax. Isso pode estar te atrapalhando.

R

Beleza Jakefrog.

Desculpa a ignorância, mas quando se usa um component do Ajax4J, automaticamente ele já não esta fazendo a a chamada em ajax.

O a:commandLink pode estar fazendo uma chamada como se fosse um h:commandLink.

E como saber se o a:commandLink esta executando uma chamada simples. Eu nunca tenha me atentado ai isso!

H

Romildo_Paiter:
Beleza Jakefrog.

Desculpa a ignorância, mas quando se usa um component do Ajax4J, automaticamente ele já não esta fazendo a a chamada em ajax.

O a:commandLink pode estar fazendo uma chamada como se fosse um h:commandLink.

E como saber se o a:commandLink esta executando uma chamada simples. Eu nunca tenha me atentado ai isso!


Não sei como funciona muito bem o richfaces, por isso pedi a ele para verificar. Eu suspeito que o ajax esteja sendo utilizado uma vez que ele chamou o método execute="@this" no botão. Ele está mandando o código do botão ser enviado para a requisição.

L

Desculpe pela demora em responder. Mas a solução apresenta pelo Romildo_Paiter funcionou perfeitamente, muito obrigado pela ajuda de todos, principalmente ao Romildo_Paiter. Grato.

R

LeonardoU, não esquece co marcar como [RESOLVIDO].

L

Neste outro trecho (mesma tabela), ao clicar no botão para alterar, é solicitado a abertura de uma rich:popupPanel. Porém o objeto selecionado não é exibido no popup. Alguém pode me ajudar, ou alguma idéia de como realizar?

visualizarcargos.xhtml

<rich:column styleClass="coluna">
                                <a4j:commandLink id="btnAlterar" action="#{cargoBean.preparaAlterarCargo()}">
                                    <h:graphicImage value="/images/edit.gif" title="Alterar"/>
                                    <rich:componentControl event="click" target="alteracargo" operation="show"/>
                                    <a4j:ajax event="click" render=":frmCargos:tabela :msg"/>
                                    <a4j:param value="#{cargoBean.cargoTmp.descricao}" assignTo="#{cargoBean.cargoTmp}"/>
                                </a4j:commandLink>
                                <a4j:commandLink id="btnExcluir" action="#{cargoBean.excluir()}" onclick="return excluir();">
                                    <h:graphicImage value="/images/delete.gif" title="Excluir"/>
                                    <a4j:ajax event="click" render=":frmCargos:tabela :msg"/>
                                    <rich:componentControl event="click" operation="show" target="informacao"/>
                                </a4j:commandLink>
                            </rich:column>

PopupPanel

<rich:popupPanel height="75" id="alteracargo" modal="true" resizeable="true" onmaskclick="#{rich:component('alteracargo')}.hide()">
                <f:facet name="header">
                    <h:outputText value="Insira a nova descrição" />
                </f:facet>
                <f:facet name="controls">
                    <h:outputLink value="#" onclick="#{rich:component('alteracargo')}.hide(); return false;">
                        Fechar
                    </h:outputLink>
                </f:facet>
                <h:form>
                    <h:panelGrid columns="3">
                        <h:outputLabel value="Descrição:"/>
                        <h:inputText id="lblDescricao" value="#{cargoBean.cargoTmp.descricao}" required="true" requiredMessage="Informe a descrição."/>
                        <h:commandButton value="Salvar"/>                        
                    </h:panelGrid>
                </h:form>
            </rich:popupPanel>

Bean

public Cargo preparaAlterarCargo() {
        cargoTmp = (Cargo) dtModelallCargos.getRowData();
        return cargoTmp;
    }
R

Cara aparentemente vc não esta passando o objeto que vc quer para o popup pegar ele.

<a4j:commandLink id="btnAlterar" action="#{cargoBean.preparaAlterarCargo([AQUI VAI O OBJETO CARGO PARA ALTERAR, VINDO DO VAR])}">  
                                    <h:graphicImage value="/images/edit.gif" title="Alterar"/>  
                                    <rich:componentControl event="click" target="alteracargo" operation="show"/>  
                                    <a4j:ajax event="click" render=":frmCargos:tabela :msg"/>  
                                    <a4j:param value="#{cargoBean.cargoTmp.descricao}" assignTo="#{cargoBean.cargoTmp}"/>  
</a4j:commandLink>

Se vc ainda não resolveu tenta isso.

Falow

L

Acabei realizando esta tarefa de outro modo, mas obrigado pela reposta.

Criado 4 de janeiro de 2012
Ultima resposta 6 de jan. de 2012
Respostas 9
Participantes 3