Commandbutton sem submit

7 respostas
D

Olá pessoal, estou com uma problema em relação ao submit de um commandbutton…

Eu possuo uma página jsf onde há um objeto ZK e um commandbutton. Ao clicar no botão chamo um método no meu bean, mas meu problema é que não posso dar um submit nesta página, pois isso vai acarretar um refresh no meu objeto ZK, levando a uma série de outros problemas. Consegui resolver esse problema de refresh na página toda através de um botão ajax, onde eu dou um “rerender” apenas no próprio botão, deixando assim meu objeto ZK intacto! No entanto… não posso utilizar ajax, por questões políticas deste projeto … então, minha pergunta é:

Há como eu chamar um método do meu backingbean através de um botão ou javascript, sem que haja um submit ou refresh da página?

Obrigado.

7 Respostas

L

O que esse metodo do objeto zk faz ? É um void ou retornar algum valor.
E também e importante sabem em que momento esse metodo deve ser invocado.

Bom, não entendi muito o seu problema, mas se não me engano você pode usar o commandLink.

D

Olá lalberto… obrigado pela sua resposta.

Às vezes é difícil expressar o real problema… então vou direto a ele… Vamos esquecer que estou trabalhando com ZK…

O que eu preciso realmente:

Através da minha página jsf, invocar um método do meu backingbean, sem que seja dado submit ou refresh nessa página.

Vou efetuar sua sugestão.

Obrigado.

D

lalberto,

testei a sua sugestão de utilizar o commandlink no lugar do commandbutton, porém não funcionou.

Alguém tem outra sugestão?

D

Opa! Tô ressuscitando o tópico. rs

Tô com o mesmo problema que o nosso amigo teve há 3 anos atrás.
Toda vez que clico no botão do commandButton, ele submita minha aplicação em canvas.

<h:form id=“form_graph”>

<h:inputHidden id=“json” value="#{analiseDeVinculosBean.json}"/>

<h:commandButton id=“salvar” action="#{analiseDeVinculosBean.salvar}" value="" class=“btn_salvar” />

<h:inputHidden id=“id_mostrado” value="#{analiseDeVinculosBean.ultIdSelecionado}"/>

</h:form>

meu método salvar(), do analiseDeVinculosBean já retorna null pra que eu fique na mesma página, e ele realmente fica. Mas ele refaz todo o body da página.
andei lendo que o commandButton é por default um submit, certo? mas dá pra usar ele sem submitar?
quero que a aplicação fique estática, que nenhum nodo do meu grapho seja alterado, mas que salve. rs

Agradeço a atenção.

Daniel Vieira.

A

daniel.svieira5:
Opa! Tô ressuscitando o tópico. rs

Tô com o mesmo problema que o nosso amigo teve há 3 anos atrás.
Toda vez que clico no botão do commandButton, ele submita minha aplicação em canvas.

<h:form id=“form_graph”>

<h:inputHidden id=“json” value="#{analiseDeVinculosBean.json}"/>

<h:commandButton id=“salvar” action="#{analiseDeVinculosBean.salvar}" value="" class=“btn_salvar” />

<h:inputHidden id=“id_mostrado” value="#{analiseDeVinculosBean.ultIdSelecionado}"/>

</h:form>

meu método salvar(), do analiseDeVinculosBean já retorna null pra que eu fique na mesma página, e ele realmente fica. Mas ele refaz todo o body da página.
andei lendo que o commandButton é por default um submit, certo? mas dá pra usar ele sem submitar?
quero que a aplicação fique estática, que nenhum nodo do meu grapho seja alterado, mas que salve. rs

Agradeço a atenção.

Daniel Vieira.

O actionListener não resolveu?Tente utiliza-lo cara, ele vai executar o método que você pedir no evento click do botão…mas confesso que não me recordo se ele reprocessa o ciclo de vida da pagina, ACHO que não e vou até dar uma lida na literatura porque deu curiosidade, hehe. Mas tente usa-lo e veja se resolve o problema.

Ademais, com Ajax voce faria isso mais facilmente. A NAO SER que voce nao possa, como o colega que abriu o tópico.

D

Já me falaram que com Ajax eu resolveria muito mais facilmente.
E eu posso usar Ajax, só não sei exatamente como. rs
Só que que não consegui fazer a aplicação rodar com ajax. Nunca trabalhei com Ajax e não achei nenhum tutorial que me ajudasse.

Esse foi o que chegou mais perto: http://www.devmedia.com.br/post-5529-conhecendo-o-ajax4jsf.html

mas quando eu adiciono os dois jars no lib da minha web-inf, e adiciono as configurações no web.xml e todo o resto que diz no tutorial, minha aplicação não sobe no tomcat.

primeiramente ele dá essa warning no xhtml:
“NLS missing message: CANNOT_FIND_FACELET_TAGLIB in: org.eclipse.jst.jsf.core.validation.internal.facelet.messages”
quando eu tento usar as tags <a4j, e até ali no xmlns:a4j=“http://richfaces.org/a4j”.

e no console aparece esse erro:

09/06/2011 08:51:32 org.ajax4jsf.framework.renderer.AjaxPhaseListener beforePhase

GRAVE: Exception on get current Skin

org.ajax4jsf.framework.skin.SkinNotFoundException: Skin with name classic not found

at org.ajax4jsf.framework.skin.SkinFactoryImpl.loadProperties(SkinFactoryImpl.java:259)

at org.ajax4jsf.framework.skin.SkinFactoryImpl.buildSkin(SkinFactoryImpl.java:208)

at org.ajax4jsf.framework.skin.SkinFactoryImpl.getSkin(SkinFactoryImpl.java:108)

at org.ajax4jsf.framework.renderer.AjaxPhaseListener.beforePhase(AjaxPhaseListener.java:134)

at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:224)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:95)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Thread.java:662)

devo estar esquecendo de alguma configuração, ou alguma biblioteca.
alguém sabe me dizer o que me falta?

Valeuzão.

D

consegui fazer o commandButton funcionar sem dar submit, e sem usar bibliotecas ajax com o código a seguir:

<h:form id=“form_graph”>

<h:inputHidden id=“json” value="#{analiseDeVinculosBean.json}"/>

<h:commandButton id=“salvar” value=“Salvar” class=“btn_salvar”>

<f:ajax execute="<a class="mention" href="/u/form">@form</a>"

listener="#{analiseDeVinculosBean.salvar}"/>

</h:commandButton>

<h:inputHidden id=“id_mostrado” value="#{analiseDeVinculosBean.ultIdSelecionado}"/>

</h:form>

Valeuzão. :slight_smile:

Criado 3 de março de 2010
Ultima resposta 9 de jun. de 2011
Respostas 7
Participantes 4