message/>
ActionErrors错误集合
ActionMessage:
错误信息
错误提示信息必须要来自资源文件,构造函数的参数是资源文件中的key
附加:
在ActionForm中对日期格式进行验证.(yyyy-MM-dd)既能够将字符串类型的生日保存在ActionForm中又能够将java.util.Date类型的生日从ActionForm中取出来.
ActionForm对象的生命周期:
Struts会将ActionForm对象根据用户需要自动存储在request或session中,默认保存在session中。
但是可以通过scope=”request”来修改。
命名属性的名字就是配置文件中FormBean中声明的name。
如:
放在Session中:
优点:
减少创建ActionForm对象的次数。
缺点:
占用资源。
会产生垃圾数据。
通过覆盖ActionForm中的reset方法,这个方法会在每次使用ActionForm之前自动调用
表单验证步骤
1)编写好.jsp页面(表单,参数)
2)写个实体类,继承ActionForm,,写好get/set方法。
重写publicvoidreset(ActionMappingarg0,HttpServletRequestarg1)和publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest)方法。
在validate中,对表单元素进行验证判断。
3)编写structs-config.xml文件。
4)写配置文件,配置文件中写错误信息。
Struct编程步骤
1)写jsp(表单,参数)
2)根据表单内容编写ActionForm(validate,reset)
3)编写处理请求的Action(execute),在Action中,可以获得处理表单的数据
4)编辑struts-config.xml,配置请求,ActionForm,Action之间的对应关系.
5)编写返回页面
在传统模型中,一个请求对应一个Action对象
/login.do--LoginAction,/reg.do--regAction会造成Action数目较多的问题
希望将相关的请求合并在一个Action对象中进行处理
1)在Action对象中,不再编写execute方法,而是为每个请求单独编写一个方法。
不再继承Action,而是MappingDispatchAction。
2)在配置文件中通过parameter属性指明,与请求对应的方法名称。
具体步骤:
1)extendsMappingDisPatchAction
2)不写execute方法,为每个请求单独编写一个方法,这些方法的返回值和参数和exectue一致
3)在配置文件中用parameter特殊说明方法名称。
/login.do--->ActionServlet--->UserMgmAction(execute[父类])根据parameter调用相应方法
LookupDispatchAction:
一个表单上有多个提交按钮的时候用
/math.do---->Action(execute)
http:
//localhost:
8080/mvc/math.do?
a=10&b=1&btn=add
http:
//localhost:
8080/mvc/math.do?
a=10&b=1&btn=subtract
1)在Action中为每个提交按钮编写一个对应的方法,不写execute,不能继承Action
2)在Action中写一个函数(getKeyMethodMap),通过这个函数体现按钮的值与方法名的对应关系。
如:
adddoAdd(),subtractdoSubtract()
3)在配置文件中,制定按钮的名字,这是struts获得按钮值的依据。
/math.doAsMathAction(execute)
a)从配置文件中获得按钮的名字(name)
b)Request.getParameter(name),获得按钮的值
c)通过调用getKeyMethodMap()函数在map中根据按钮的值找到对应的方法名获得与按钮对应的方法名字
d)调用对应的方法
写Action具体步骤
1)extendsLookupDispatchAction
2)针对每个按钮写一个方法
3)写getKeyMethodMap(),指定按钮值和方法的对应关系,其中按钮的值来自资源文件,不能直接写在map中
4)配置parameter=”按钮的名字”,在JSP中,同一个表单的按钮都叫一个名字
第四天动态ActionForm---DynaActionForm
MappingDispatchAction
1)extendsMappingDispatchAction
2)为每个请求编写一个方法.(返回类型,参数列表与execute一致)
3)
path:
客户端请求的servletpath
type:
处理请求的Action的类型
name:
指定ActionForm的名字,ActionForm的名字是通过form-bean定义的
validate:
Form是否需要验证
input:
验证出错之后的返回页面
scope:
ActionForm的作用域,默认为session,命名属性的名字就是ActionForm定义的名字
parameter:
|->MappingDispatchAction:
方法的名字.
|->LookupDispatchAction:
按钮的名字.
DynaActionForm动态ActionForm
login.jsp---->LoginForm(org.apache.struts.action.DynaActionForm)
--属性名字一定和客户端参数一一对应-->
execute(mapping,form,request,response){
DynaActionFormlf=(DynaActionForm)form;
lf.get("userName");
lf.get("password");
}
步骤:
1)在struts-config.xml中配置DynaActionForm
2)在标签中象实用普通ActionForm一样使用DynaActionForm
3)在execute方法中,从DynaActionForm中获得数据.
DynaActionFormdaf=(DynaActionForm)form;
daf.get("userName");
daf.get("password");
Controller:
ActionServlet:
前端控制器,接受客户请求.
Action:
后端控制器,返回应答.
struts的缺陷:
对业务代码的侵入性较强.提高了耦合
解决:
将业务逻辑封装在javabean中,Action去调用javabean。
第五天
使用struts的编程步骤
1)编写jsp()一般客户端是以.do结尾,如果要在服务器上运行则不用.do,如果要发送到客户端上运行的话就要加.do
2)编写ActionForm,封装客户端的参数
A)根据参数个数来决定是否需要使用ActionForm
B)extendsActionForm,配置DynaActionForm
C)extendsActionForm
a)变量名和客户端参数名称一一对应
b)validate,reset
3)编写Action对请求进行处理
A)Action,MappingDispatchAction,LookupDispatchAction
B)extendsAction
C)或extendsMappingDispatchAction为每个请求单独编写一个方法
D)extendsLookupDispatchAction为每个按钮编写一个方法。
getKeyMethod