关于validator框架验证问题??(急!!!!)

cz_2008 2008-04-28 05:17:28
本人初学struts,对struts技术还不是很了解,我现在在做一个BBS系统,其中有个模块是用户注册,我创建了regist.jsp其中加载registform.jsp表单,然后提交,我想用validator框架来对提交的信息进行验证,其中创建的AddUserAction是用来将提交的正确信息出入数据库,但我一提交表单时就会出现以下错误,但具体的问题我现在也不是很清楚,错误提示如下:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:514)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

java.lang.NullPointerException
mybbs.action.AddUserAction.execute(AddUserAction.java:30)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.

控制台的信息是:
SEVERE: Error creating form bean of class org.apache.struts.action.DynaValidatorForm
java.lang.NullPointerException
at org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:212)
at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:292)
at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:191)
at org.apache.struts.action.RequestProcessor.processActionForm(RequestProcessor.java:319)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:202)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
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:175)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
28-Apr-2008 17:01:25 org.apache.struts.action.RequestProcessor processException
WARNING: Unhandled Exception thrown: class java.lang.NullPointerException
28-Apr-2008 17:01:25 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at mybbs.action.AddUserAction.execute(AddUserAction.java:30)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
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:175)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

请高手指点!!!!!!!!
...全文
118 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanhongqi_happyboy 2008-04-29
  • 打赏
  • 举报
回复
ActionForm 继承的类不对
yami251139 2008-04-29
  • 打赏
  • 举报
回复
贴代码,原因楼上说的很清楚了
panxuan 2008-04-29
  • 打赏
  • 举报
回复
动态表单有问题。
panxuan 2008-04-29
  • 打赏
  • 举报
回复
Error creating form bean of class org.apache.struts.action.DynaValidatorForm
gongyali2005 2008-04-29
  • 打赏
  • 举报
回复
看看哪里有NULL值.
chenhongxin 2008-04-29
  • 打赏
  • 举报
回复
晕,把程序弄出来看看..
不过从错误上看你是值没有传到,一个是FORM里的字段名和页上的不对应,再有就是你的值发的时候有问题目...
zhoutaomtv 2008-04-29
  • 打赏
  • 举报
回复
代码贴出来一下
cz_2008 2008-04-29
  • 打赏
  • 举报
回复
validation.xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

<form-validation>
<global>
<constant>
<constant-name>mobile</constant-name>
<constant-value>^\d{11}\d*$</constant-value>
</constant>
</global>

<formset>
<form name="registform">
<field property="username" depends="required,maxlength">
<arg0 key="label.username" />
<arg1 key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>

<field property="password"
depends="required,validwhen,maxlength">
<arg0 key="label.password" />
<arg1 key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
<var>
<var-name>test</var-name>
<var-value>
((password2 ==*this*) and (*this* != null))
</var-value>
</var>
</field>

<field property="nickname" depends="required,maxlength">
<arg0 key="label.nickname" />
<arg1 key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>

<field property="birthyear"
depends="required,integer,intRange">
<arg key="label.birthyear" />
<arg name="intRange" key="${var:min}" resource="false"
position="1" />
<arg name="intRange" key="${var:max}" resource="false"
position="2" />
<var>
<var-name>min</var-name>
<var-value>1900</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>2007</var-value>
</var>
</field>

<field property="birthmonth"
depends="required,integer,intRange">
<arg key="label.birthmonth" />
<arg name="intRange" key="${var:min}" resource="false"
position="1" />
<arg name="intRange" key="${var:max}" resource="false"
position="2" />
<var>
<var-name>min</var-name>
<var-value>1</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>12</var-value>
</var>
</field>

<field property="birthday"
depends="required,integer,intRange">
<arg key="label.birthday" />
<arg name="intRange" key="${var:min}" resource="false"
position="1" />
<arg name="intRange" key="${var:max}" resource="false"
position="2" />
<var>
<var-name>min</var-name>
<var-value>1</var-value>
</var>
<var>
<var-name>max</var-name>
<var-value>31</var-value>
</var>
</field>

<field property="email" depends="required,email">
<arg key="label.email" />
</field>

<!--<field property="mobile" depends="mask">
<arg key="label.maskmsg" />
<var>
<var-name>mask</var-name>
<var-value>${mobile}</var-value>
</var>
</field> -->
</form>
</formset>
</form-validation>
validator-rules.xml中的代码我就不贴了,谢谢大家,看看是什么问题!!
cz_2008 2008-04-29
  • 打赏
  • 举报
回复
创建动态的FormBean,在struts-config.xml中的配置是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
<!--
<data-sources>
<data-source key="oracleDB1" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName"
value="com.mysql.jdbc.Driver" />
<set-property property="url"
value="jdbc:mysql://127.0.0.1:3306/mybbs?autoReconnect=true" />
<set-property property="maxActive"
value="5"/>
<set-property property="username"
value="root"/>
<set-property property="password"
value="yesterdayn"/>
<set-property property="autoCommit"
value="true"/>
</data-source>
</data-sources>
-->

<form-beans >
<form-bean name="registForm" type="org.apache.struts.action.DynaValidatorForm">
<form-property name="birthmonth" type="java.lang.String" />
<form-property name="birthday" type="java.lang.String" />
<form-property name="sex" type="java.lang.String" />
<form-property name="nickname" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
<form-property name="info" type="java.lang.String" />
<form-property name="birthyear" type="java.lang.String" />
<form-property name="username" type="java.lang.String" />
<form-property name="password2" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
<form-property name="action" type="java.lang.String" />
<form-property name="weblog" type="java.lang.String" />
<form-property name="signature" type="java.lang.String" />
<form-property name="qq" type="java.lang.String" />
<form-property name="face" type ="java.lang.String"/>
<form-property name="mobile" type="java.lang.String" />
<form-property name="skype" type="java.lang.String" />
</form-bean>

</form-beans>

<global-exceptions />
<global-forwards>
<forward name="regsuccessed" path="/regsu.jsp"/>
</global-forwards>
<action-mappings>
<action path="/list-topic" forward="/list_topic.jsp"/>
<action path="/disbbs" forward="/disbbs.jsp" />
<action path="/regist" forward="/regist.jsp"/>
<action
attribute="registForm"
input="global.jsp"
name="registForm"
path="/addUser"
scope="request"
type="mybbs.action.AddUserAction" />
</action-mappings>
<controller processorClass="mybbs.MyRequestProcessor" />
<message-resources parameter="mybbs.ApplicationResources" />

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
</struts-config>

这是AddUserAction中的部分代码,是处理这次请求的
package mybbs.action;

import mybbs.DBConn;
import mybbs.CAEncode;
import mybbs.CheckUser;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.validator.DynaValidatorForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.util.Date;
import java.sql.*;

public final class AddUserAction
extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
HttpSession session=request.getSession();
String ip = request.getRemoteAddr();
Date date = new Date();
DynaValidatorForm registForm = (DynaValidatorForm) form;
CAEncode encode = new CAEncode();
DBConn conn = new DBConn();
String username = encode.htmlEncode( (String) registForm.get("username"));
String password = encode.htmlEncode( (String) registForm.get("password"));
String password2 = encode.htmlEncode( (String) registForm.get("password2"));
String nickname = encode.htmlEncode( (String) registForm.get("nickname"));
String sex = encode.htmlEncode( (String) registForm.get("sex"));
String birthyear = encode.htmlEncode( (String) registForm.get("birthyear"));
String birthmonth = encode.htmlEncode( (String) registForm.get("birthmonth"));
String birthday = encode.htmlEncode( (String) registForm.get("birthday"));
String email = encode.htmlEncode( (String) registForm.get("email"));
String mobile = encode.htmlEncode( (String) registForm.get("mobile"));
String qq = encode.htmlEncode( (String) registForm.get("qq"));
String skype = encode.htmlEncode( (String) registForm.get("skype"));
String weblog = encode.htmlEncode( (String) registForm.get("weblog"));
String info = encode.htmlEncode( (String) registForm.get("info"));
String signature = encode.htmlEncode( (String) registForm.get("signature"));
String face = encode.htmlEncode( (String) registForm.get("face"));
String action=(String) registForm.get("action");
String PageForward="global";
try{
CheckUser CU = new CheckUser();
if (action.equals("1")) {
if (!CU.isExist(username, nickname)) {
if (face.equals("")) {
face = "image/a1.jpg";
}
String sql =
"INSERT INTO bbsuser VALUE(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement pstmt = conn.getPstmt(sql);
pstmt.setInt(1, 0);
pstmt.setString(2, username);
pstmt.setString(3, password);
pstmt.setString(4, nickname);
pstmt.setString(5, sex);
pstmt.setString(6, birthyear);
pstmt.setString(7, birthmonth);
pstmt.setString(8, birthday);
pstmt.setString(9, email);
pstmt.setString(10, weblog);
pstmt.setString(11, qq);
pstmt.setString(12, skype);
pstmt.setString(13, mobile);
pstmt.setString(14, signature);
pstmt.setString(15, date.toLocaleString());
pstmt.setString(16, date.toLocaleString());
pstmt.setString(17, ip);
pstmt.setString(18, ip);
pstmt.setString(19, info);
pstmt.setString(20, face);
pstmt.setInt(21, 0);
pstmt.setInt(22, 0);
pstmt.setInt(23, 100);
pstmt.setInt(24, 0);
pstmt.setInt(25, 0);
pstmt.setString(26, "user");
int flag = pstmt.executeUpdate();
pstmt.close();
if (flag > 0) {
request.setAttribute("username", username);
request.setAttribute("password", password);
PageForward = "regsuccessed"; //新用户注册成功
}
else { //新用户注册失败
PageForward = "global";
}
}
else {
PageForward = "global";
request.setAttribute("throw", new String("用户名或呢称已存在!"));
}
}

cz_2008 2008-04-29
  • 打赏
  • 举报
回复
这是regist.jsp:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html; charset=gbk"%>
<HTML>
<jsp:include page="include/head.txt" />
<BODY vLink=#333333 link=#333333>
<TABLE cellSpacing=0 cellPadding=8 width="98%" align=center
bgColor=#dbeffb border=0>
<TBODY>
<TR>
<TD>
<jsp:include page="/include/toplogo.jsp" />
<BR>
<!--**************************************************************************************-->
<jsp:include page="include/registform.jsp" />
<!--**************************************************************************************-->
<BR>
<CENTER></CENTER>
<BR>
</TD>
</TR>
</TBODY>
</TABLE>
<jsp:include page="include/buttom.jsp" />
</BODY>
</HTML>

registform.jsp:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html; charset=GBK"%>
<html>
<body>
<form action="addUser.do" method="post">
<TABLE cellSpacing=0 cellPadding=4 width=657 align=center border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: #04359b 1px solid" width=21 rowSpan=17>
 
</TD>
<TD class=bold align=middle background=images/part1_38.gif colSpan=2
height=27>
<FONT color=#ffffff>填写信息</FONT>
</TD>
<TD style="BORDER-LEFT: #04359b 1px solid" width=11 rowSpan=17>
 
</TD>
</TR>
<TR>
<TD class=f00 style="BORDER-TOP: #04359b 1px solid" bgColor=#dae8f8
colSpan=2 height=40>
<P style="MARGIN-LEFT: 20px">
*号注明的都需要填写,密码请区分大小写。头像请输入URL,如“upload/a1.jpg”
</P>
</TD>
</TR>
<TR>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
align=right width=125 bgColor=#f2f8fd>
用户名:
</TD>
<TD width="468" bgColor=#f2f8fd
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid">
<INPUT class=input2 maxLength=20 name=username>
<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right>
 
</TD>
<TD>
<FONT color=#666666>用户名应该用英文字母、数字、汉字和下划线"_"组成。</FONT>
</TD>
</TR>
<TR>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
align=right bgColor=#f2f8fd>
密码:
</TD>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
bgColor=#f2f8fd>
<INPUT class=input2 type=password maxLength=16 name=password>
<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right>
确认密码:
</TD>
<TD>
<INPUT class=input2 type=password maxLength=16 name=password2>
<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right bgColor=#f2f8fd
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid">
昵称:
</TD>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
bgColor=#f2f8fd>
<INPUT class=input2 maxLength=16 name=nickname>
<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right bgColor=#f2f8fd
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid">
头像:
</TD>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
bgColor=#f2f8fd>
<INPUT name=face class=input2 id="face" maxLength=16>
</TD>
</TR>
<TR>
<TD align=right>
性别:
</TD>
<TD>
<INPUT type=radio CHECKED value='男' name=sex>

<INPUT type=radio value='女' name=sex>

</TD>
</TR>
<TR>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
align=right bgColor=#f2f8fd>
生日:
</TD>
<TD
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #c7dced 1px solid"
bgColor=#f2f8fd>
<INPUT class=input2 maxLength=4 size=4 value=1980 name=birthyear>
年-
<INPUT class=input2 maxLength=2 size=2 value=01 name=birthmonth>
月-
<INPUT class=input2 maxLength=2 size=2 value=01 name=birthday>

<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right>
E-mail:
</TD>
<TD>
<INPUT class=input2 maxLength=40 name=email>
<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right bgColor=#f2f8fd>
手机号码
</TD>
<TD bgColor=#f2f8fd>
<INPUT class=input2 maxLength=40 name=mobile>
</TD>
</TR>
<TR>
<TD align=right bgColor=#f2f8fd>
腾讯QQ:
</TD>
<TD bgColor=#f2f8fd>
<input name="qq" type="text" id="qq" size="10" maxlength="10">
<SPAN class=f00>*</SPAN>
</TD>
</TR>
<TR>
<TD align=right bgColor=#f2f8fd>
Skype:
</TD>
<TD bgColor=#f2f8fd>
<INPUT name=skype class=input2 id="skype" maxLength=40>
</TD>
</TR>
<TR>
<TD align=right bgColor=#f2f8fd>
Weblog:
</TD>
<TD bgColor=#f2f8fd>
<INPUT name=weblog class=input2 id="weblog" maxLength=40>
</TD>
</TR>
<TR>
<TD align=right valign="top" bgColor=#f2f8fd>
个人简介:
</TD>
<TD bgColor=#f2f8fd>
<textarea name="info" cols="42" rows="6" id="info"></textarea>
</TD>
</TR>
<TR>
<TD class=LH16
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #04359b 1px solid"
vAlign=top align=right>
签名档:
</TD>
<TD class=LH16
style="BORDER-TOP: #c7dced 1px solid; BORDER-BOTTOM: #04359b 1px solid">
<TEXTAREA class=input2 name=signature rows=6 cols=42 maxlength="500"></TEXTAREA>
</TD>
</TR>
<INPUT type="hidden" name="action" value='1'>
<TR>
<TD width=21></TD>
<TD height=40 colSpan=2 align=middle>
<div align="center">
<input type="image" height=25 src="images/btn_30.gif" width=66
border=0 name=B1>
  
<IMG onclick=signForm.reset() height=25 src="images/btn_32.gif"
width=66 border=0>
</div>
</TD>
<TD width=11></TD>
</TR>
</TBODY>
</TABLE>
<BR>
</form>
<body>
</HTML>

jiatai416 2008-04-28
  • 打赏
  • 举报
回复
AddUserAction没有接收到值。
小南瓜瓜 2008-04-28
  • 打赏
  • 举报
回复
相关代码贴出来
zzxiaoma 2008-04-28
  • 打赏
  • 举报
回复
空指针,传入的参数有空值

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧