原因是Action和ActionForm对应文件中没有继承相应的类,具体来说:
ActionForm的编写:
- 必须继承org.apache.struts.action.ActionForm
- ActionForm内可能封装的表单元素有很多,要得到它们的值,必须编写和表单元素同名的属性
Action的编写:
- 必须继承org.apache.struts.action.Action (不是ActionServlet)
- 必须重写execute方法来处理业务逻辑
修改后重新运行:
注意事项:
用Struts标签生成的表单必须指定action属性,否则会报错。
另外,<form>标签的action属性应该包含项目名称,如action="/Ch11/reg.do",开头的"/"代表服务器根目录。
<html:form>标签的action属性,如action="/reg.do",开头的"/"代表项目的虚拟目录(测试发现action="/reg"即不加do后缀的写法也能正常运行)。
在浏览器查看网页源代码:
<form name="RegForm" method="post" action="/Ch11/reg.do">
<input type="submit" value="Submit"><input type="submit" name="org.apache.struts.taglib.html.CANCEL" value="Cancel" onclick="bCancel=true;">
</form>
说明服务器端通过Struts标签向客户端输出了传统表单。