2

I have created a simple xhtml page with following code (like Primefaces showcase):

    <body>
    <div>My test</div>

    <h:form>
        <p:messages showDetail="true"/>
        <p:captcha label="Captcha" />
    </h:form>

</body>

Loading this page, I get following exceptions:

exception

javax.servlet.ServletException: Expression cannot be null
root cause

javax.el.ELException: Expression cannot be null

My scope is to use captcha component in a form and check if user checked it by a button (submit).

This is the fullstack trace:

Severe: Error Rendering View[/test.xhtml] javax.el.ELException: Expression cannot be null at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:172) at com.sun.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:237) at com.sun.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:295) at com.sun.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:112) at org.jboss.weld.util.el.ForwardingExpressionFactory.createValueExpression(ForwardingExpressionFactory.java:53) at org.jboss.weld.el.WeldExpressionFactory.createValueExpression(WeldExpressionFactory.java:48) at com.sun.faces.application.ApplicationImpl.evaluateExpressionGet(ApplicationImpl.java:446) at javax.faces.application.ApplicationWrapper.evaluateExpressionGet(ApplicationWrapper.java:684) at org.primefaces.component.captcha.CaptchaRenderer.getPublicKey(CaptchaRenderer.java:87) at org.primefaces.component.captcha.CaptchaRenderer.encodeEnd(CaptchaRenderer.java:50) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 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:647) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) at java.lang.Thread.run(Thread.java:748) Info: Found ExceptionQueuedEvent: true Severe: javax.el.ELException: Expression cannot be null at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:172) at com.sun.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:237) at com.sun.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:295) at com.sun.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:112) at org.jboss.weld.util.el.ForwardingExpressionFactory.createValueExpression(ForwardingExpressionFactory.java:53) at org.jboss.weld.el.WeldExpressionFactory.createValueExpression(WeldExpressionFactory.java:48) at com.sun.faces.application.ApplicationImpl.evaluateExpressionGet(ApplicationImpl.java:446) at javax.faces.application.ApplicationWrapper.evaluateExpressionGet(ApplicationWrapper.java:684) at org.primefaces.component.captcha.CaptchaRenderer.getPublicKey(CaptchaRenderer.java:87) at org.primefaces.component.captcha.CaptchaRenderer.encodeEnd(CaptchaRenderer.java:50) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 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:647) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) at java.lang.Thread.run(Thread.java:748) Warning: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception

Diaboliko
  • 231
  • 1
  • 5
  • 21
  • Version info should be in the text, not in the title. And there most likely is a full stacktrace in the server to help you find the real cause and compare your example to the PrimeFaces showcase. There is a difference... – Kukeltje Feb 22 '18 at 10:32
  • No, the fullstacktrace is that. I have replied Primefaces showcase but does not work. Perhaps the captcha component has some requirements... – Diaboliko Feb 22 '18 at 11:59
  • This is never the full stacktrace. It might be what you see in the browser but there is with a 100% certainty more in the server log – Kukeltje Feb 22 '18 at 12:07
  • Evident... but the fullstack trace in the server log does not say much more. I updated the post – Diaboliko Feb 22 '18 at 12:37
  • It **DOES** say much more. Check in what method of the captcha this error sort of originates. It's a pointer to what you should configure. The PF showcase is for 6.2RC1, you use 5.0. Check the showcase for 5.0 in the source in github and the documentation for 5.0 (and check the 6.1 docs for captcha and not the remark for the field that you most likely should use... All info is actually in the docs and the stacktrace – Kukeltje Feb 22 '18 at 12:48
  • I update all to version 6.1 of Primefaces but same error.. – Diaboliko Feb 22 '18 at 13:49
  • Solved adding captcha key information in the context-param. Thanks the same, I hope that my thread and solution can be useful. – Diaboliko Feb 22 '18 at 15:37
  • please create an answer with web.xml example. – Kukeltje Feb 22 '18 at 20:27

2 Answers2

2

You have to go to https://www.google.com/recaptcha/admin

Get a Private and Public key, then register in web.xml with

<context-param>
        <param-name>primefaces.PUBLIC_CAPTCHA_KEY</param-name>
        <param-value>PUBLIC_KEY</param-value>
</context-param>

<context-param>
        <param-name>primefaces.PRIVATE_CAPTCHA_KEY</param-name>
        <param-value>PRIVATE_KEY</param-value>
</context-param>
Carlos OB
  • 31
  • 3
0

Taking @carlos-ob into account, when using spring-boot-joinfaces-starter, it needs to be in application.yml:

joinfaces:
  jsf:
    project-stage: Development
    state-saving-method: server
    #interpret-empty-string-submitted-values-as-null: true
    #datetimeconverter-default-timezone-is-system-timezone: true
  primefaces:
    theme: ultima
    font-awesome: true
    PUBLIC_CAPTCHA_KEY: PUBLIC_K
    PRIVATE_CAPTCHA_KEY: PRIVATE_K
Gilberto
  • 893
  • 1
  • 13
  • 28