在struts.xml配置文件中,给动做类注入值。调用的是setter方法。javascript
缘由:是由一个staticParams的拦截器完成注入的。java
经过用户的表单封装请求正文参数。数据库
实体模型:Entity,对应数据库中表的记录(注意类对应的是表结构,而对象对应的是一条记录)编程
缘由:是由params拦截器完成的。数组
问题:浏览器
因为咱们没有初始化user对象,默认为null,一调用setUser方法,就空指针异常了。可是框架却封装进去值了。服务器
缘由:框架
经过执行过程:工具
此处的学习目标:目前先记住怎么写,要想理解,必须等讲完OGNL表达式以后。学习
缘由:是由一个modelDriven拦截器作的。
注册界面:
结果视图:
实际开发中用户经过浏览器输入的数据都是String或者String[]。
String/String[]————填充模型(set方法)————>POJO(plain old java object) pojo中有java的数据类型。
POJO————————获取(get方法)————>页面展现:String
写数据:(增,删,改)都是String或String[]数组转换为其余类型。
读数据:(查)其余类型转换为String。
a.基本数据类型自动转换。
b.日期类型:默认按照本地日期格式转换(yyyy-MM-dd)。
c.字符串数组:默认用逗号+空格,链接成一个字符串。
示例:把日期格式按照 MM/dd/yyyy的格式转换
局部类型转换器:只能指定javabean中的属性用
按照属性来注册。在属性所属的javabean的包下创建一个.properties文件。文件名称:javabean名称-conversion.properties
全局类型转换器:(推荐)
按照要转换的数据类型来注册。
at the top op classpath,创建一个固定名称xwork-conversion.properties的属性文件。
当转换失败后,页面提示:
解决办法:配置回显结果视图
问题:
配置了回显视图后,当转换失败时,能够回到请求页面,可是表单数据都没了?
显示错误提示:借助Struts2的标签库。
回显数据:使用struts2的标签库生成表单。(建议使用)
错误信息中文提示:使用的是struts2的国际化。
问题:
类型转换器当转换失败后,如何进入input视图的?
缘由:
是由一个叫作conversionError的拦截器完成的。
注意:
要想使用类型转换中的错误处理,在定义Action时必须继承ActionSupport
用户的输入验证,必须作,且工做量巨大。
客户端验证:javascript
服务端验证:逻辑验证(咱们的代码)
注意:若是客户端和服务端二选一的话,服务器端的不能省。
实际开发中:客户端+服务端
前提:
动做类必须继承ActionSupport
在代码中编写验证规则。
a、针对动做类中的全部动做方法进行验证:
在动做类中覆盖public void validate()方法。
可是当咱们再写一个动做方法时:
由此可知,该验证方法会对动做类中的全部动做方法进行验证。
b、针对动做类中的某个动做方法进行验证
针对上面的问题,解决办法1:给不须要验证的动做方法添加一个@SkipValidation注解。
解决办法2:validation方法遵照书写规范。
解决办法1和解决办法2的使用时机:须要验证的动做方法少,用解决办法2。须要验证的方法多,用解决方式1。(简单一点:挑少的写)
全部编程式验证的弊端:硬编码。
经过编写验证规则的xml文件。须要验证时,编写xml文件,不要验证,就不写。
优点:解决了2.1编程式验证的弊端
a、针对动做类中的全部动做进行验证:在动做类所在的包中,创建一个ActionClassName-validation.xml的文件,内容以下:
注意:它是针对动做类中的全部动做方法。
b、针对动做类中的某个动做进行验证:在动做类所在的包中创建一个xml文件,名称为ActionClassName-ActionName-validation.xml。内容以下:
它是针对指定动做方法进行验证:
xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validator\default.xml
例如:咱们使用requiredstring,默认是去空格,当咱们不想去空格时,就能够给验证器注入参数。
基于字段的:
另外一种基于验证器的:
运行结果: