资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2019/7/8,1,详解ActionForm,2019/7/8,2,ActionForm高级应用1: ActionForm的scope, 现在我们来考虑scope的意思 首先在ActionForm内增加一个构造函数,在reset函数内和构造函数内增加一个标记,修改scope,我们来看一下结果 结论:scope=request:每次提交都会新生成一个ActionForm对象;scope=session:在一次会话中,生成一个ActionForm对象,保存在session内,以后就不生成了,在session中取得 在scope=session时,一定要注意reset的用法,2019/7/8,3,ActionForm高级应用2:表单跨页,有两个表单,第一个表单输入账号密码,提交,到下一个表单输入住址,电话,要求将这些内容在一个ActionForm里面保存。 1:建立ActionForm,生成p1,p2 2:配置一个forwardAction,指向ActionForm,跳转到p2,让p1提交给它 3:配置另一个Action,指向同一个ActionForm,让p2提交给它 4:注意:scope应该等于session,2019/7/8,4,ActionForm高级应用3: 动态ActionForm,过多的ActionForm会让系统庞大,怎样解决? 能否不编写ActionForm? 可以,但是表单就要用传统表单了。 (1)建立动态ActionForm (2)用DynaActionForm.get方法使用动态ActionForm,2019/7/8,5,但是这样带来一个缺陷:验证功能失去了,前端验证两种方案:1:ActionForm验证2: Validate框架验证 Validate框架可以解决这个问题 Validate框架的要点:将验证的工作写在XML文件中 这有一个好处,比如很多表单都要验证输入不能为空,传统方法需要在每个ActionForm中写if语句,相当于同样的语句分散在项目的很多地方,现在有了这个XML文件,只需要写一次就好了,2019/7/8,6,怎样做?,首先,你的项目中必须有两个jar文件 jakarta-oro.jar:处理文本 commons-validator.jar:提供验证功能 一个系统提供的文件:validator-rules.xml 这个文件中定义了我们项目中可能出现的所有要验证的规则,这是Struts自己定义的,以后你只要在另一个XML文件中调用就可以了,2019/7/8,7,介绍validator-rules.xml,包含了一些通用验证规则,对所有struts应用都适用,一般情况下,没有必要改变这个文件。 required 不能为空 validwhen 条件验证 minlength 最小长度 maxlength 最大长度 mask 正则表达式 double 是否是double integer 是否是整数 date 是否是日期 intRange 整数范围 doubleRange double范围 email 是否是email,2019/7/8,8,练习:,注册界面,输入姓名,email,电话,要求: 姓名不能为空,email必须合法,电话必须是数字,否则显示相应错误信息,2019/7/8,9,步骤,1:建立validator-rules.xml和validation.xml 2:将这两个文件作为插件存入struts配置文件,在struts配置文件最后加上: ,2019/7/8,10,步骤,编写JSP,ActionForm,Action,注意,此时,ActionForm应该继承org.apache.struts.validator.ValidatorForm,或者是org.apache.struts.validator.DynaValidatorForm 然后你就可以在validation.xml内写验证规则了,2019/7/8,11,validation.xml,需要由开发人员自己建立 目的是调用validator-rules文件 你可以将validator-rules.xml的DTD声明拷贝过来,便于开发 怎样写? 1:所有的规则写在中 2:在中可以定义,里面包含各个表单的检查,2019/7/8,12,validation.xml,3:对表单的检查,格式如下: 注意,field可以写多个,表示对多个属性进行验证,当规则用到多个,msg也可以写多个,2019/7/8,13,高级验证话题1:设定单个验证门限,要知道,并不是所有的验证只是“是”或者“否”的验证,比如,在确定电话号码的最小长度时,你需要设定最小长度是7,怎么做? 方法:在中定义: 规则名称 值 ,2019/7/8,14,高级验证话题2:设定多个验证门限,如果要确定输入的分数是在0-100之间怎么办? 方法:在中增加depends=intRange,定义: max 100 min 0 ,2019/7/8,15,高级验证话题3:设定条件验证门限,如果要确定输入的密码和确认密码要相等怎么办? 方法:在中增加validwhen,定义: test (前一个属性 = *this*) ,2019/7/8,16,高级验证话题4:怎样传参数?,怎样向msg中传递参数? 常见的办法:用变量传递参数 ,2019/7/8,17,返璞归真,如果你想在ActionForm内做验证,但是想要做一些比较复杂的验证,如email是否合法,我们推荐你用一个类: org.apache.commons.validator.GenericValidator 里面有很多静态方法可以供你使用,2019/7/8,18,需要大家自己去掌握的问题,1:可以用正则表达式来规定一些东西,如输入账号时,规定不能以数字开头,怎么办?正则表达式:请大家去参考http:/jakata.apache.org/regexp/index.html 2:如果自己想要定义一些验证规则,怎么作?,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号