(resolvido) commandLink com f:ajax

boa noite! estou com dificuldade de fazer funcionar o <f:ajax> em um commandLink que tenho no meu form.

<h:dataTable id="tableV" value="#{projectBean.showValuesAdd()}" var="value">
                        <f:facet name="header" >Values </f:facet>                    
                        <h:column>
                            <fieldset><legend>#{value.idOctopus.varOctopus}</legend>
                                #{value.alternative}                                
                                <h:commandLink value="X" 
                                               action="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" ></h:commandLink>
                            </fieldset>
                        </h:column>
                    </h:dataTable>

estre trecho do codigo exibe a minha lista e em cada elemento tenho um commandlink pra deletar o elemento, assim com esta exclui certinho, porem queria usar o ajax pra nao precisar recarregar a pagina.
Tentei assim, mas nao rolou, ele excluir mas nao atualiza o datatable:

<h:commandLink value="X" >
    <f:ajax event="click" listener="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" render="tableV"/>
</h:commandLink>

alguem tem alguma ideia do que pode ser!

cara…

ta usando prime 2.0?

ele tem ajax nativo…

pq não usa??

veja no showcase do primefaces >)

[quote=d34d_d3v1l]cara…

ta usando prime 2.0?

ele tem ajax nativo…

pq não usa??

veja no showcase do primefaces >)[/quote]

dae d34d_d3v1l, sim eu vi (e testei) o prime mas realmente os meu valores estao sendo excluidos porem so atualizam depois de um F5. tanto com h:commandlink ou p:commandlink.

coloca o dataTable dentro de um h:panelgroup e atualiza o panelGroup não o dataTable

tambem já tinha visto essa situação, a questao eh que tenho uma combo que renderiza esse datatable.

<div>
<f:ajax event="change" listener="#{projectBean.addValuesOctopusToList()}" render="tableV">
                        <h:selectOneMenu id="vos" value="#{projectBean.valuesOctopusId}" >
                            <f:selectItem itemValue="" itemLabel="Select" />
                            <f:selectItems value="#{projectBean.listValueOctopus()}"
                                           var="o"
                                           itemValue="#{o.value}"
                                           itemLabel="#{o.label}">
                            </f:selectItems>
                        </h:selectOneMenu>
                    </f:ajax>
                </div>

                <div>
                    <h:dataTable id="tableV" value="#{projectBean.showValuesAdd()}" var="value" >
                        <f:facet name="header" >Values </f:facet>                    
                        <h:column>
                            <fieldset><legend>#{value.idOctopus.varOctopus}</legend>
                                #{value.alternative}

                                <f:ajax event="action" render="tableV" >    
                                    <h:commandLink action="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" value="X">
                                    </h:commandLink>
                                </f:ajax>
                            </fieldset>
                        </h:column>
                    </h:dataTable>
                </div>

o seu selectOneMenu funciona? ele atualiza o dataTable?é só mandar ele atualizar o panelgroup…
alterei o seu commandlink

[code]
<f:ajax event=“change” listener="#{projectBean.addValuesOctopusToList()}" render=“panel”>
<h:selectOneMenu id=“vos” value="#{projectBean.valuesOctopusId}" > …

<h:panelGroup id=“panel”>
<h:dataTable id=“tableV” value="#{projectBean.showValuesAdd()}" var=“value” >
<f:facet name=“header” >Values </f:facet>
<h:column>
#{value.idOctopus.varOctopus}
#{value.alternative}

                               <h:commandLink action="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" value="X">  

<f:ajax render=“panel” />
</h:commandLink>

                        </fieldset>  
                    </h:column>  
                </h:dataTable></h:panelGroup>  [/code]

só outra pergunta… existe o event=“action” no f:ajax? nunca usei…

tenta alguma coisa assim…

[quote=alves.Felipe]o seu selectOneMenu funciona? ele atualiza o dataTable?é só mandar ele atualizar o panelgroup…
alterei o seu commandlink

[code]
<f:ajax event=“change” listener="#{projectBean.addValuesOctopusToList()}" render=“panel”>
<h:selectOneMenu id=“vos” value="#{projectBean.valuesOctopusId}" > …

<h:panelGroup id=“panel”>
<h:dataTable id=“tableV” value="#{projectBean.showValuesAdd()}" var=“value” >
<f:facet name=“header” >Values </f:facet>
<h:column>
#{value.idOctopus.varOctopus}
#{value.alternative}

                               <h:commandLink action="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" value="X">  

<f:ajax render=“panel” />
</h:commandLink>

                        </fieldset>  
                    </h:column>  
                </h:dataTable></h:panelGroup>  [/code]

só outra pergunta… existe o event=“action” no f:ajax? nunca usei…

tenta alguma coisa assim…[/quote]

ok, vamos por partes, sim o meu selectonemenu funciona, ou seja ele atualiza a minha h:dataTable, o envento action pelo o que eu li(e posso ta falando uma baita besteira) assume o valor do action do commandlink, saca ? e quando eu coloquei o h:panelGroup deu o seguinte erro no navegador:

Stack Trace:

javax.faces.FacesException: <f:ajax> contains an unknown id 'panel' - cannot locate it in the context of the component j_idt27
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getResolvedId(AjaxBehaviorRenderer.java:285)
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.appendIds(AjaxBehaviorRenderer.java:272)
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.buildAjaxCommand(AjaxBehaviorRenderer.java:214)
	at com.sun.faces.renderkit.html_basic.AjaxBehaviorRenderer.getScript(AjaxBehaviorRenderer.java:86)
	at javax.faces.component.behavior.ClientBehaviorBase.getScript(ClientBehaviorBase.java:103)
	at com.sun.faces.renderkit.RenderKitUtils.getSingleBehaviorHandler(RenderKitUtils.java:1610)
	at com.sun.faces.renderkit.RenderKitUtils.renderHandler(RenderKitUtils.java:1703)
	at com.sun.faces.renderkit.RenderKitUtils.renderOnclick(RenderKitUtils.java:452)
	at com.sun.faces.renderkit.html_basic.CommandLinkRenderer.renderAsActive(CommandLinkRenderer.java:231)
	at com.sun.faces.renderkit.html_basic.CommandLinkRenderer.encodeBegin(CommandLinkRenderer.java:125)
	at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:302)
	at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:384)
	at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:161)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304)
	at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)

põe para reenderizar assim:

<h:commandLink action="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" value="X"> <f:ajax render=":NomeDoForm:panel" /> </h:commandLink>

[quote=alves.Felipe]põe para reenderizar assim:

<h:commandLink action="#{projectBean.removeValuesOctopusToList(value.idValuesOctopus)}" value="X"> <f:ajax render=":NomeDoForm:panel" /> </h:commandLink>[/quote]

Perfeito alves.Felipe! me tirou um baita problema das costas, to a noite toda pesquisando isso cara. mto obrigado mesmo

então cara… é normal acontecer isso… de vc mandar reenderizar o componente e ele não atualizar…
ai vc precisa colocar ele dentro de outro (ex. panelgroup), e mandar atualizar o pai…

Baita dica!