2011-06-23 20 views
0

我是STRUTS的新手,正在尝试制定一个简单的示例。当我执行的例子我上互联网浏览器下面的错误..如何在Struts1.x中删除NullPointerException

<< javax.servlet.ServletException: javax.servlet.jsp.JspException: Exception creating bean of class com.example.LoginForm >> 

,并在Eclipse控制台中看到一个类似的错误与空指针异常的附加线

<< SEVERE: Error creating form bean of class com.example.LoginForm 
java.lang.NullPointerException >> 

下面列出的是部分我struts-config.xml

struts-config.xml中的 - 提取

<struts-config> 

< form-beans> 
    < form-bean name="loginRequest" type="com.example.LoginForm" />  
</form-bean> 
< /form-beans> 


< !-- =========================================== Global Forward Definitions --> 

< global-forwards> 
< forward 
    name="welcome" 
    path="/Welcome.do"/> 
< /global-forwards> 


< !-- =========================================== Action Mapping Definitions --> 

< action-mappings> 
< action path="/login" 
    name="loginRequest" 
    type="com.example.LoginAction"> 
< forward name="success" 
    path="/success.jsp"> 
< /forward>  
< forward name="failure" 
    path="/login.jsp"> 
    < /forward> 
</action>  
<action path="/Welcome" 
    forward="/pages/Welcome.jsp"/> 
< /action-mappings> 


< !-- ======================================== Message Resources Definitions --> 

< message-resources parameter="MessageResources" /> 

< /struts-config>  

我的JSP login.jsp的

< %@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld" %>  
< %@ taglib prefix="html" uri="/WEB-INF/struts-html.tld" %> 

< bean:message key="title" /> 

< html:form action="login"> 

    <bean:message key="login.username"/> 

    <html:text property="username"></html:text> 

    <br> 

    <bean:message key="login.password"/> 

    <html:text property="password"></html:text> 

    <br> 

    <html:submit> 
     <bean:message key="login.submit"/> 
    </html:submit> 

< /html:form> 

LoginForm类中,

package com.example; 

import org.apache.struts.action.ActionForm; 

public class LoginForm extends ActionForm  
{  
    private String username; 
    private String password; 

    public LoginForm() 
    { 

    } 

    public String getUsername() { 
     return username; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 

} 

LoginAction类

package com.example; 

import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  

import org.apache.struts.action.Action;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward;  
import org.apache.struts.action.ActionMapping;  

public class LoginAction extends Action 
{  
    @Override  
    public ActionForward execute(ActionMapping mapping, ActionForm form,  
      HttpServletRequest request, HttpServletResponse response)  
      throws Exception  
    { 
     LoginForm login = (LoginForm)form;  
     String name = login.getUsername();  
     String pass = login.getPassword();  

     if(name.equals("hello") && pass.equals("hello"))  
      return mapping.findForward("success"); 
     else  
      return mapping.findForward("failure");  
    }  
} 

的MessageResources.properties类

title=Welcome 
login.username=Username  
loguin.password=Password  
login.submit=Submit 

堆栈跟踪

org.apache.struts.util.RequestUtils createActionForm  
SEVERE: Error creating form bean of class com.example.LoginForm 
java.lang.NullPointerException 
=========== ====================== 
    at org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:289) 
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:259) 
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:213) 
    at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:526) 
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:503) 
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f0(login_jsp.java:122) 
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:79) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 

Jun 23, 2011 12:56:47 PM org.apache.struts.util.PropertyMessageResources loadLocale 
WARNING: Resource org/apache/struts/taglib/html/LocalStrings_en_US.properties Not Found. 
Jun 23, 2011 12:56:47 PM org.apache.struts.util.PropertyMessageResources loadLocale 
WARNING: Resource org/apache/struts/taglib/html/LocalStrings_en.properties Not Found. 
Jun 23, 2011 12:56:47 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception <br/><br/> 
javax.servlet.jsp.JspException: Exception creating bean of class com.example.LoginForm under form name loginRequest 
    at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:536) 
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:503) 
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f0(login_jsp.java:122) 
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:79) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 

任何人都可以弄清楚我做错了什么,以及为什么会出现这个错误。

感谢,
ANKIT

+0

我没有在您提供的所有代码片段中看到对CustomerForm的任何引用。它来自哪里? – ddewaele

+0

发布堆栈跟踪以及 – fmucar

+0

嗨ddewaele ...由于错误我把错误的行,所以现在我纠正它。 – user751786

回答

3

你在你的行动忘了/html:form

这是你应该如何在窗体中调用你的动作。

<html:form action="/login"> 

更新,确保清洁所有 XML文档,包括你的JSP的

以下(例子)的XML验证不允许:

  • < form-beans>
  • < /struts-config>

XML不允许<></></>标记中的空格。这也适用于标签。


更新,我找到了正确的问题。这是您在struts-config.xml中对表单bean的声明。

您有:

<form-beans> 
    <form-bean name="loginRequest" type="com.example.LoginForm" />  
</form-bean> 
</form-beans> 

您要关闭<form-bean>两次

解决方案:

< form-beans> 
    <form-bean name="loginRequest" type="com.example.LoginForm" />  
</form-beans> 

现在,这必须工作。 :-)(很抱歉这么晚才回复,工作需要我。

另外,我建议使用IDE,比如Eclipse或NetBeans的做你的Struts项目(而不是通过手工打字做到这一点),尤其是对你的XML声明。

+0

嗨精英...我做到了这一点,但它不工作。 – user751786

+0

是的,我没有给标签内的任何空格......我给空间只是为了发布代码。 – user751786

+0

您的'LoginForm'是否已编译并存在于WAR文件的META-INF \ classes'文件夹下? –

0

检查您jsp.Its使用登录作为行动的形式,而不是LoginForm的

0

那么错误是因为你没有正确配置你的Struts-config.xml。

相应地调用窗体的操作时,您必须给出特定的Form-Bean名称。

现在看看你的代码,你有这样的行动。

< action path="/login" name="loginRequest" type="com.example.LoginAction"> 
< forward name="success" path="/success.jsp">< /forward> 

但同时ú还呼吁POJO在一起,但你有你让POST行动将任何数据到用户交互之前调用该bean。 因此,请在调用主要操作之前创建一个可以调用bean类的新操作。

例如:

< action path="/loginPre" name="loginRequest" forward="/youloginformname.jsp"> 
</action> 

这样的问题将得到解决。