首页 > 解决方案 > 在 CDI 事件上从 bean 调用 PrimeFaces.current().ajax().update(...) 时出现 NullPointerException

问题描述

我想从 JSF bean 更新组件。
但收到 NullPointerException :

java.lang.NullPointerException
    at org.primefaces.PrimeFaces$Ajax.update(PrimeFaces.java:335)
    at org.primefaces.PrimeFaces$Ajax.update(PrimeFaces.java:359)
    at ir.moke.logmag.view.LogView.start(LogView.java:21)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:95)
    at [internal classes]
    at ir.moke.logmag.api.TestLog.addLog(TestLog.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.ibm.ws.jaxrs20.cdi.component.JaxRsFactoryImplicitBeanCDICustomizer.serviceInvoke(JaxRsFactoryImplicitBeanCDICustomizer.java:302)
    at [internal classes]    

这是我的示例代码:

日志视图.java

@SessionScoped
@Named
public class LogView implements Serializable {
    private String name;

    public void start(@Observes String name) {
        this.name = name;
        System.out.println("Receive : " + name);
        PrimeFaces.current().ajax().update("form:log");
    }

    public String getName() {
        return name;
    }
} 

测试日志.java

@Path("/log")
public class TestLog {

    @Inject
    private Event<String> event;

    @POST
    @Path("/add")
    public Response addLog(String name) {
        System.out.println("API " + name);
        event.fire(name);
        return Response.accepted().build();
    }
}

HTML

<h:body>
    <h:form id="form">
        <p:outputLabel value="Output : "/><br/>
        <p:outputLabel id="log" value="#{logView.name}"/>
    </h:form>
</h:body>    

我想从 rest api 发送消息并更新 JSF 页面上的组件。
如何解决这个问题?

我的环境:
Liberty 19.0.0.4
JavaEE 8
JSF 2.3

标签: jsfprimefaces

解决方案


推荐阅读