Я получаю исключение null-указателя, когда пытаюсь запустить событие в приложении Java EE. Ниже приведен код.Null pointer Исключение для javax.enterprise.event.Event
HelloEvent
модель событий:
package com.eventhandling;
import java.io.Serializable;
import java.util.logging.Logger;
public class HelloEvent implements Serializable {
private static final long serialVersionUID = 1L;
private String message;
private static Logger LOGGER=Logger.getLogger("Log");
public HelloEvent() {
}
public HelloEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "helloEvent toString";
}
}
HelloMessenger
управляемый компонент:
package com.eventhandling;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.enterprise.event.Event;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;
@ManagedBean(name = "messenger")
@SessionScoped
public class HelloMessenger {
@Inject
Event<HelloEvent> events;
private static Logger LOGGER = Logger.getLogger("Log");
public void hello() {
LOGGER.info("hello called");
LOGGER.info("events" + events);
HelloEvent helloEvent= new HelloEvent("testEvent");
LOGGER.info("helloEvent"+helloEvent);
events.fire(helloEvent);
}
}
HelloListener
событие Слушатель:
package com.eventhandling;
import javax.enterprise.event.Observes;
import javax.faces.bean.SessionScoped;
@SessionScoped
public class HelloListener {
public void listenToHello(@Observes HelloEvent helloEvent) {
System.out.println("HelloEvent: " + helloEvent);
}
}
вид JSF Welcome.xhtml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body bgcolor="white">
<h3>JSF 2.0 Hello World Example - welcome.xhtml</h3>
<h4>Welcome </h4>
<h:form>
<h:commandButton value="Fire Event" action="#{messenger.hello}"></h:commandButton>
</h:form>
</h:body>
</html>
Maven зависимостей:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0</version>
</dependency>
При нажатии на командную кнопку, а затем я получаю NullPointerException
. Это связано с тем, что свойство events
не вводится и остается null
. Как это вызвано и как я могу его обработать?
Логи на Tomcat загрузки:
Jan 30, 2014 4:43:35 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.4
.6.
Jan 30, 2014 4:43:35 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], ra
ndom [true].
Jan 30, 2014 4:43:36 PM org.apache.catalina.core.AprLifecycleListener initialize
SSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1d 5 Feb 2013)
Jan 30, 2014 4:43:37 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-6080"]
Jan 30, 2014 4:43:37 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-6006"]
Jan 30, 2014 4:43:37 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3047 ms
Jan 30, 2014 4:43:37 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jan 30, 2014 4:43:37 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.42
Jan 30, 2014 4:43:37 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive D:\software\testtomcat_6080-_Analytics_w
ars\apache-tomcat-7.0.42\webapps\JavaServerFaces.war
Jan 30, 2014 4:43:43 PM org.apache.catalina.loader.WebappClassLoader validateJar
File
INFO: validateJarFile(D:\software\testtomcat_6080-_Analytics_wars\apache-tomcat-
7.0.42\webapps\JavaServerFaces\WEB-INF\lib\jsp-api-2.1.jar) - jar not loaded. Se
e Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
Jan 30, 2014 4:43:43 PM org.apache.catalina.loader.WebappClassLoader validateJar
File
INFO: validateJarFile(D:\software\testtomcat_6080-_Analytics_wars\apache-tomcat-
7.0.42\webapps\JavaServerFaces\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded
. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.cl
ass
Jan 30, 2014 4:43:46 PM com.sun.faces.config.ConfigureListener contextInitialize
d
INFO: Initializing Mojarra 2.1.7 (SNAPSHOT 20120206) for context '/JavaServerFac
es'
Jan 30, 2014 4:43:46 PM com.sun.faces.spi.InjectionProviderFactory createInstanc
e
INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans metho
ds marked with these annotations will have said annotations processed.
Jan 30, 2014 4:43:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\software\testtomcat_6080-_Analytics
_wars\apache-tomcat-7.0.42\webapps\admin
Jan 30, 2014 4:43:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\software\testtomcat_6080-_Analytics
_wars\apache-tomcat-7.0.42\webapps\docs
Jan 30, 2014 4:43:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\software\testtomcat_6080-_Analytics
_wars\apache-tomcat-7.0.42\webapps\examples
Jan 30, 2014 4:43:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\software\testtomcat_6080-_Analytics
_wars\apache-tomcat-7.0.42\webapps\host-manager
Jan 30, 2014 4:43:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\software\testtomcat_6080-_Analytics
_wars\apache-tomcat-7.0.42\webapps\manager
Jan 30, 2014 4:43:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\software\testtomcat_6080-_Analytics
_wars\apache-tomcat-7.0.42\webapps\ROOT
Jan 30, 2014 4:43:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-6080"]
Jan 30, 2014 4:43:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-apr-6006"]
Jan 30, 2014 4:43:48 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 11372 ms
Спасибо за ваш ответ. Я внес изменения, как вы упомянули. и использовал javax.enterprise.context для '@SessionScoped'. Но я получаю следующее исключение: javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /welcome.xhtml 14,74 action = "# {messenger.hello}": Целевая недоступность, идентификатор 'messenger' разрешен для null Я тоже получал это исключение, поэтому я использовал «@ManagedBean». Пожалуйста, расскажите мне вероятную причину этого исключения, когда я использую «@Named (« messenger »)» [import javax.inject.Named ;] – user3247376
Также вы можете рассказать мне, как настроить beans.xml в качестве примера, который я выполнил, не отображалось никаких beans.xml .. – user3247376
В WEB-INF вам нужен beans.xml. Файл может быть пустым. Аналогично вам нужен beans.xml в любой банке, которую вы имеете, поместите ее в META-INF. Вам не составит труда разобраться в этой информации. –