使用paramsPrepareParamsStack拦截器站后的运行流程
1)paramsPrepareParamsStack和defaultStack一样都是拦截器栈,而struts-default包默认使用的是defaultStack
2)可以在struts配置文件中通过以下方式修改使用的默认拦截器栈
<default-interceptor-ref name="paramsPrepaareParamsStack"></default-interceptor-ref>
3)paramsPrepareParamsStack拦截器在于 : params--》modelDriven-》params
所以先把请求的参数赋值给action对应的属性,在根据赋给action的那个属性值决定压倒之战栈顶的对象,之后再为栈顶对象的属性赋值。
对于edit操作而言:
1:先为employeeAction的employeeID赋值
2:根据employee从数据库中加载对应的对象,并放入到值站的栈顶
3:在为栈顶对象的employee赋值
4:吧栈顶对象的属性回显在表单中
关于回显:struts表单标签会从值站中获取对象的属性值进行回显。
Struts2类型转换:
http没有类型的概念,每一项表单输入只可能是字符串或字符串数组
ActionContext.getContext().getValueStack.push(object)把当前对象放入栈顶
struts2表单标签的name值可以被复位属性的属性:name=mgr.name ,name=mgr.age;
全局的类型转换器可以正常工作!
国际化的目标
1)如何配置国际化资源文件
资源文件加载的顺序如何那?离当前action较近的将被优先加载
2)如何在页面上和action中访问国际化资源文件的value值
1.在action类中,若action实现了textProvider接口,则可以调用getText()方法获取value值
通过继承actionSupport的方式
2.页面上可以使用s:text标签,对应表单标签可以使用表单标签的key属性值
若有占位符,则可以使用s:text标签的s:param标签来填充占位符
若当前页面来自于action则可以直接访问action中的属性值
可以利用标签和ognl表达式直接访问值站中的属性值对象站和map站
3)实现通过超链接切换语言。
关键在于知道struts框架是如何确定local对象
通过阅读I18N拦截器
声明时验证: