Java 命令按钮中的JSF ActionListener
我在JSF2中制作了两页的简单示例。在第一页上,我通过接口类发布了带有actionListener的命令按钮。目标是当我单击第一页上的按钮时,第二页将显示更改后的值。 但当第一次启动web服务器(JBOSS)时,我得到了错误页面,直到我启动第二个页面。在这种情况下,第二页将显示默认值。在第一页之后,一切都很好,即使我关闭了第二页。发生了什么,做了什么? 以下是错误消息:Java 命令按钮中的JSF ActionListener,java,jsf-2,Java,Jsf 2,我在JSF2中制作了两页的简单示例。在第一页上,我通过接口类发布了带有actionListener的命令按钮。目标是当我单击第一页上的按钮时,第二页将显示更改后的值。 但当第一次启动web服务器(JBOSS)时,我得到了错误页面,直到我启动第二个页面。在这种情况下,第二页将显示默认值。在第一页之后,一切都很好,即使我关闭了第二页。发生了什么,做了什么? 以下是错误消息: ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defa
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ActionListenerWithInterface].[Faces Servlet]] (http--0.0.0.0-8080-1) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
at com.tutoriali.test.UserActionListener.processAction(UserActionListener.java:14) [classes:]
at com.sun.faces.facelets.tag.jsf.core.ActionListenerHandler$LazyActionListener.processAction(ActionListenerHandler.java:129) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UICommand.broadcast(UICommand.java:300) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_37]
以下是xhtml页面:
首页:
<!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"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head><title>JSF primer</title></h:head>
<h:body>
<h1>Primer ActionListenera realizovan preko interface-a</h1>
<h:form>
<h2>ActionListener</h2>
<hr />
<h:commandButton id="SubmitButton" value="Submit" action="#{userData.showResult()}" >
<f:actionListener type="com.tutoriali.test.UserActionListener"/>
</h:commandButton>
</h:form>
</h:body>
</html>
下面是BeackendBeanUserData.java:
package com.tutoriali.test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="userData", eager=true)
@SessionScoped
public class UserData implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String data="Difoltna vrednost";
public String showResult(){
return "result";
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
它抱怨您的userData对象为null。您在会话中实际在哪里设置它?userData变量在第14I行为null,设置是根据UserActionListener类中第14行的数字。初始化有问题吗?如何克服这个问题呢?第14行是userData.setData(“helloworld!”);在类userActionLitener(接口)中,有谁能对此有所了解?
package com.tutoriali.test;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
public class UserActionListener implements ActionListener {
@Override
public void processAction(ActionEvent arg0) throws AbortProcessingException {
UserData userData = (UserData)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("userData");
userData.setData("Hello World!");
System.out.println("******* We are in interface!*************");
}
}
package com.tutoriali.test;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="userData", eager=true)
@SessionScoped
public class UserData implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String data="Difoltna vrednost";
public String showResult(){
return "result";
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}