[RESOLVIDO] <p:ajax event="blur" /> dentro de <f:selectItems> - JSF - Primefaces

5 respostas Resolvido
jsfajaxprimefacesjava
I

Olá!

Tenho um <p:selectCheckboxMenu> e dentro dele tem um <f:selectItems>
Preciso que a requisição seja enviada apenas quando o usuário clicar fora do combo e não quando ele selecionar algum item.
Tentei o <p:ajax event="blur" /> mas é retornada uma Exception dizendo que o evento blur não é suportado.
Alguma dica?

Segue o código:

<p:selectCheckboxMenu value="#{filterEventsHandler.statusSelected}" label="#{msg.status}" converter="defaultConverter" panelStyle="width:125px" scrollHeight="150">
    <f:selectItems value="#{eventListView.eventDamageStatusType}" var="disposition" itemLabel="#{disposition.description}" itemValue="#{disposition}" />
     <p:ajax	event="blur" oncomplete="PF('damageTable').filter()" update="damages" />						                    
</p:selectCheckboxMenu>

StackTrace:

javax.faces.view.facelets.TagException: /eventList.xhtml @48,93 <p:ajax> Event:blur is not supported.

at org.primefaces.behavior.base.AbstractBehaviorHandler.applyAttachedObject(AbstractBehaviorHandler.java:178)

at org.primefaces.behavior.base.AbstractBehaviorHandler.apply(AbstractBehaviorHandler.java:117)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at com.sun.faces.facelets.tag.jsf.core.FacetHandler.apply(FacetHandler.java:104)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at com.sun.faces.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:106)

at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:206)

at com.sun.faces.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:395)

at com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:366)

at com.sun.faces.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:111)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)

at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202)

at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)

at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)

at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)

at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)

at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:312)

at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:371)

at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:350)

at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)

at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:174)

at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)

at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87)

at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:161)

at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:1006)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99)

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

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

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

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

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

at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:78)

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

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

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

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

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

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

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

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

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

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

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

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

Obs: já tentei incluir o ajax “dentro” do selectItems, mas o selectItems não pode recebê-lo.

Obrigado desde já.

5 Respostas

R

Esta é nova pra mim … mas olhando a documentação deste componente tem o onHide(), segundo a documentação este será executado ao overlay for fechado. Não tenho nenhuma app em JSF aqui no trampo p/ realizar este teste, veja ai e qualquer coisa dê um retorno. Acredito que se realmente a function fazer ao fechar o overlay independente pelo button x ou clicando fora do elemento, irá ajudar na sua lógica.

I

Show!
Vou tentar sim.
Valeu!

Só que dessa forma terei que fazer uns trambiques pra fazer o update do componente na view né?

R
Solucao aceita

Então reforçando que eu falei, não tenho uma app JSF aqui, seu falar besteira me desculpa. Eu sugiro você usar o remoteCommand do primefaces … acho que ficaria + ou - assim:

<p:remoteCommand name="updateDamages" update="damages" />
........
<p:selectCheckboxMenu value="#{filterEventsHandler.statusSelected}" 
                                     label="#{msg.status}" 
                                     converter="defaultConverter" panelStyle="width:125px" 
                                     scrollHeight="150" onHide="updateDamages();PF('damageTable').filter();">
            <f:selectItems value="#{eventListView.eventDamageStatusType}" var="disposition" 
                                  itemLabel="#{disposition.description}" itemValue="#{disposition}" />
            <!-- <p:ajax	event="blur" oncomplete="PF('damageTable').filter()" update="damages"/>						                    -->
</p:selectCheckboxMenu>
I

Isso!!
Acho que é por aí mesmo.
Vou implementar aqui e respondo.
Valeu!

I

Caraca, rapá!
Funcionou belezinha.

Valeu!

Criado 2 de dezembro de 2016
Ultima resposta 5 de dez. de 2016
Respostas 5
Participantes 2