刚才看了一下,确实是validate="false"这里不对,不过,将validate设置为true后,出现了新的问题。java.lang.NullPointerException at com.sxf.personal.form.RegistrationForm.validate(RegistrationForm.java:74) at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125) at java.lang.Thread.run(Thread.java:536)下面是RegistrationForm的validate方法: public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) { System.out.println("----------Begin Validate--------------"); ActionErrors errors =new ActionErrors(); if (name.length()<1){ errors.add("error",new ActionError("registion.name.missing")); } if (password.length()<1){ errors.add("error",new ActionError("registion.password.missing")); } if (email.length()<1){ errors.add("error",new ActionError("registion.email.missing")); } System.out.println("----------End Validate--------------"); return errors; }
action代码 public ActionForward Create(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { /**@todo: complete the business logic here, this is just a skeleton.*/ return actionMapping.findForward("Create"); } 这样不行 public ActionForward Create(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { /**@todo: complete the business logic here, this is just a skeleton.*/ if (actionForm ==null){ System.out.println("--------Enter form-------------"); RegistrationForm form=new RegistrationForm(); httpServletRequest.setAttribute("registrationForm",form); } return actionMapping.findForward("Create"); }这样还是不行。都报告java.lang.NullPointerException
if (name.length()<1){ 也许你的name并没有得到值.也就是没有初始化.
谢谢 beyondii(十万个为什么),我将RegistrationForm中validate方法中的name打印出来,结果是null。这就是说form的初始化有问题。我的loginForm也是这么写的,没有出现这样的问题阿。 public class LoginForm extends ActionForm { private String name; private String password; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) { ActionErrors errors=new ActionErrors(); System.out.println("login username=" + name); if (name.length()<1){ errors.add("error",new ActionError("login.name.missing")); } if (password.length()<1){ errors.add("error",new ActionError("login.password.missing")); } return errors; } } 我测试了一下,当我第一次进入loginForm的时候,如果什么都不填写,进入validate后判断name的长度小于1,而不是null。我还做了一个测试。我再两个loginForm和RegistrationForm的validate方法中打印“----------Begin Validate--------------”,测试发现第一次进入loginForm的时候,loginForm的没有执行System.out.println("---Begin Validate---"),但是进入Registration.jsp时,就会执行System.out.println("---Begin Validate---"),这时候form中name书行为null。这是怎么一回事呢?
at com.sxf.personal.form.RegistrationForm.validate(RegistrationForm.java:74)
at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)下面是RegistrationForm的validate方法: public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {
System.out.println("----------Begin Validate--------------");
ActionErrors errors =new ActionErrors();
if (name.length()<1){
errors.add("error",new ActionError("registion.name.missing"));
}
if (password.length()<1){
errors.add("error",new ActionError("registion.password.missing"));
}
if (email.length()<1){
errors.add("error",new ActionError("registion.email.missing"));
}
System.out.println("----------End Validate--------------");
return errors;
}
你是不是在action或着其他地方new RegistrationForm
如果是这样你可能没有初始化name等或者初始化为null
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
/**@todo: complete the business logic here, this is just a skeleton.*/ return actionMapping.findForward("Create"); }
这样不行
public ActionForward Create(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
/**@todo: complete the business logic here, this is just a skeleton.*/
if (actionForm ==null){
System.out.println("--------Enter form-------------");
RegistrationForm form=new RegistrationForm();
httpServletRequest.setAttribute("registrationForm",form);
} return actionMapping.findForward("Create"); }这样还是不行。都报告java.lang.NullPointerException
也许你的name并没有得到值.也就是没有初始化.
public class LoginForm
extends ActionForm {
private String name;
private String password;
public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setPassword(String password) {
this.password = password;
} public String getPassword() {
return password;
} public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {
ActionErrors errors=new ActionErrors();
System.out.println("login username=" + name); if (name.length()<1){
errors.add("error",new ActionError("login.name.missing"));
}
if (password.length()<1){
errors.add("error",new ActionError("login.password.missing"));
}
return errors;
}
}
我测试了一下,当我第一次进入loginForm的时候,如果什么都不填写,进入validate后判断name的长度小于1,而不是null。我还做了一个测试。我再两个loginForm和RegistrationForm的validate方法中打印“----------Begin Validate--------------”,测试发现第一次进入loginForm的时候,loginForm的没有执行System.out.println("---Begin Validate---"),但是进入Registration.jsp时,就会执行System.out.println("---Begin Validate---"),这时候form中name书行为null。这是怎么一回事呢?