4.1、ModelDriven
如果希望传递对象信息到action,但对象信息较多时,需要传递大量的参数并且要设置这些参数,工作量很大,所以建议的方式是在action中直接创建相应的对象,此时在jsp页面中可以通过如下一种方式进行参数的传递
但是使用这样的方式带来的问题是在表单中的名称不能按照我们开发人员的习惯来定义,此时就需要通过ModernDriven来实现如下传值
1、让action实现ModelDriven接口。
2、覆盖getModel方法
3、当一个类实现了ModelDriven之后,就会将这个model放入到root中,所以我们的input中不用加任何的对象信息就可以直接放置到msg对象中
4.2、类型转换
当使用modelDriven来实现参数接受时,可能由于类型的不一致(特别是一些复杂类型)导致接受参数报错,此时就需要使用类型转换器
类型转换器有两种模式,一种全局模式(所有的action均有作用),另外一种是局部模式(针对某个特定的action起作用)
全局模式实现步骤
1、写一个类继承StrutsTypeConvert
2、在类路径创建xwork-conversion.properties文件,在这个文件中说明要转换的对象
以上的全局转换器是针对所有的需要转换的类来指定,但是有时候可能会根据不同的action来进行转换,这个时候就会使用到局部转换器
1、创建一个类继承StrutsTypeConverter
2、在action所在的包中创建ActionName-conversion.properties
4.3、文件上传
Struts2对文件上传提供了天生的支持,只要设置一个表单域为file并且将form的类型提供为tultipart/form-data,struts2会自动完成普通表单和文件表单的识别。
1、定义一个文件提供相应的上传form
2、在action中定义相应的属性来接收file对象,如果是一组属性定义一个数组,如果是一个属性定义一个对象。属性的名称必须是表单中的name名称
4.4、拦截器
拦截器是Struts2中非常重要的一种控制手段
在开发中可以使用拦截器来拦截用户的请求,并且进行相应的权限控制
1、创建拦截器
写一个类继承AbstractInterceptor
2、配置拦截器
2.1、先创建拦截器
2.2、在action中使用拦截器
问题:当使用了这个拦截器之后,出现了一个问题,原来应该传的值都变为null了。?
是因为当我们设定了拦截器之后,默认拦截器就不起作用了(默认拦截器是在struts-default.xml中设定的),所以在创建新的拦截器时必须可以拥有原有的默认拦截器,可以使用拦截器栈来处理
学习视频教程中拦截器的实例
4.5、国际化(I18N)
1、国际化的概念
ResourceBudle可以支持国际化,通过配置文件(.properties)完成国际化的支持的
2、创建配置文件的要求
Message_zh_CN.properties(_CN表示的是国家的编码,可以省略)
Message_en_UK.properties(针对美国英语的配置文件,同样也可以省略_UK)
3、使用java.util中ResourceBudle可以实现
4、Struts2的实现
局部、全局的
局部的一般不使用
全局有两种方式:
4.1、针对package的全局设定
·在action的所在包的任何路径下创建package_zh.properties或package_en.propterties
·在这两个文件中加入相应的key和value
·让需要进行国家的Action实现ActionSupport类之后在页面使用<s:text name=""/>完成调用
4.2、全局国际化
·在类路径下创建相应的资源文件
·在配置中加入全局资源文件的名称
4.6、struts2的常用标签
Struts2提供了一组非常好用的Form来帮助我们完成开发
1、Struts2的theme
稴truts2提供一组主题帮助开发者来实现界面操作,默认主题是xhtml,
修改主题可以在配置文件中设置
2、常用标签
4.7、服务器端验证
Struts2提供了大量的服务器端验证方法(XML,Annotation等)