提交表单时出现空指针异常

yygymmmmsee 2009-03-19 04:28:28
jsp页面的表单内容如下

<html:form action="Example.do?action=submitExam" method="post">
<logic:iterate id="question" name="exam" type="com.wsp.exam_system.actionform.QuestionForm" scope="session" indexId="ind">
<font size="5">${ind+1}. <bean:write name="question" property="subject"/></font><br>
<html:hidden property="idArr[${ind}]" name="question"/>

     <html:radio property="answerArr[${ind}]" styleClass="noborder" value="A">
A.<bean:write name="question" property="opA"/></html:radio><br>
     <html:radio property="answerArr[${ind}]" styleClass="noborder" value="B">
B.<bean:write name="question" property="opB"/></html:radio><br>
     <html:radio property="answerArr[${ind}]" styleClass="noborder" value="C">
C.<bean:write name="question" property="opC"/></html:radio><br>
     <html:radio property="answerArr[${ind}]" styleClass="noborder" value="D">
D.<bean:write name="question" property="opD"/></html:radio><br>
</logic:iterate>
<center><html:submit value="提交" property="submit"/></center>
</html:form>



struts-config.xml 配置文件中的与该异常有关的代码如下

<form-beans>
<form-bean name="example" type="com.wsp.exam_system.actionform.QuestionForm">
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>
</form-bean>
</form-beans>
<action path="/Example"
type="com.wsp.exam_system.action.StartExamAction"
name="example"
scope="request"
parameter="action"
>
<forward name="exam" path="/example.jsp" redirect="true"/>
</action>


下面的方法是表单提交时所用到的action的方法,该action继承了 DispatchAction

public ActionForward submitExam(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

ActionForward af = null;
QuestionForm qf = (QuestionForm)form;
String[] idArr = qf.getIdArr();
String[] answerArr = qf.getAnswerArr();
double score = ExampleManager.checkAnwser(idArr,answerArr);
System.out.println(score);
request.getSession().setAttribute("score",score);
af = mapping.findForward("exam");
return af;
}


我在红色代码处设置了断点,但是一点提交仍然会出现异常,程序根本就没有运行到红色代码处变产生了异常,这是为什么啊?

先谢谢大家了!
...全文
555 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yygymmmmsee 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 jabeginner 的回复:]
你这里是涉及到了多表单的提交。
错误不是出现你的程序里,而是struts框架本身的问题。struts框架对对表单的提交自动收集时出现的问题,只要把struts里面的DynaActionForm里面的一个get方法改造一下就可以啦。修改struts框架里的源码。
[/Quote]

怎么改造啊?谢谢!
z8210865t 2009-04-07
  • 打赏
  • 举报
回复
<form-bean name="example" type="com.wsp.exam_system.actionform.QuestionForm">
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>
</form-bean>
把这个去掉

就换成普通的ActionForm

<form-beans>
<form-bean name="questionForm" type="com.wsp.exam_system.actionform.QuestionForm" />
</form-beans>

在QuestionForm中定义idArr answerArr
jabeginner 2009-04-07
  • 打赏
  • 举报
回复
你这里是涉及到了多表单的提交。
错误不是出现你的程序里,而是struts框架本身的问题。struts框架对对表单的提交自动收集时出现的问题,只要把struts里面的DynaActionForm里面的一个get方法改造一下就可以啦。修改struts框架里的源码。
yygymmmmsee 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Study_Work_2009 的回复:]
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>

将上面的类型改为java.lang.String[] 或java.util.ArrayList
[/Quote]

还是不行
BearKin 2009-03-23
  • 打赏
  • 举报
回复
看你的异常是表单映射有问题 有的参数类型不匹配 你去检查下看看
Study_Work_2009 2009-03-23
  • 打赏
  • 举报
回复
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>

将上面的类型改为java.lang.String[] 或java.util.ArrayList

yygymmmmsee 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mousetsun 的回复:]
动态表单
去掉
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>
在com.wsp.exam_system.actionform.QuestionForm中加入
private String[] idArr;
private String[] answerArr;
还有set get 方法

试试...
[/Quote]

还是不行啊
yygymmmmsee 2009-03-22
  • 打赏
  • 举报
回复
加了的,主要是其他的都没有错,就这个有错
酒浪子 2009-03-22
  • 打赏
  • 举报
回复
动态表单的type为org.apache.struts.validator.DynaValidatorActionForm或是DynaActionForm
使用struts的<html:form>action中需要加.do
jackwade007 2009-03-22
  • 打赏
  • 举报
回复
再仔细看看
Kaka272827267 2009-03-22
  • 打赏
  • 举报
回复
还没解决?如果LZ你不知道动态表单的话,你还是新建个ActionForm去做
Jacky_Zhu_1983 2009-03-21
  • 打赏
  • 举报
回复
动态表单
去掉
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>
在com.wsp.exam_system.actionform.QuestionForm中加入
private String[] idArr;
private String[] answerArr;
还有set get 方法

试试...
yygymmmmsee 2009-03-21
  • 打赏
  • 举报
回复
这个问题还是没有解决啊
yygymmmmsee 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Kaka272827267 的回复:]
<form-bean name="example" type="com.wsp.exam_system.actionform.QuestionForm">
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>
</form-bean>

你这边用的是动态表单,action里面肯定取不到值
类型也错了,你要的是数组,不是java.lang.String
[/Quote]

如果把上面两句话注释掉呢?或者就不配置行不行?
我记得我其他的action和form-bean的配置都和这个差不多,但是其他的没有错啊
Kaka272827267 2009-03-19
  • 打赏
  • 举报
回复
<form-bean name="example" type="com.wsp.exam_system.actionform.QuestionForm">
<form-property name="idArr" type="java.lang.String"/>
<form-property name="answerArr" type="java.lang.String"/>
</form-bean>

你这边用的是动态表单,action里面肯定取不到值
类型也错了,你要的是数组,不是java.lang.String

yygymmmmsee 2009-03-19
  • 打赏
  • 举报
回复

以下是页面上的错误信息

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

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

exception

javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
org.apache.commons.beanutils.PropertyUtils.setIndexedProperty(PropertyUtils.java:1458)
org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1013)
org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


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


--------------------------------------------------------------------------------

Apache Tomcat/5.5.20
ouyangxiaokang6 2009-03-19
  • 打赏
  • 举报
回复
画面是什么状况?是404还是500
你的action继承DispatchAction了吗?必须继承DispatchAction
yygymmmmsee 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hwy000 的回复:]
submitExam把s改大写看看
[/Quote]


在action里s就是小写的啊
hwy000 2009-03-19
  • 打赏
  • 举报
回复
submitExam把s改大写看看
zuguanqun 2009-03-19
  • 打赏
  • 举报
回复
加上这个试试
<html:javascript formName="example"/>
加载更多回复(1)

81,094

社区成员

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

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