Welcome 微信登录

首页 / 软件开发 / JAVA / Unmi的Struts2学习笔记(六)

Unmi的Struts2学习笔记(六)2011-09-04 Unmi.cc 隔叶黄莺米洗毕,水适量,盖合上,心摇摆,总觉水多了一分或是少了几点,于是重又 加上或倒出少许,其实这丁点份量完全无碍煮出香喷喷的饭来。及至将熟之际, 亦有犹豫,心中默数至少10,如再有不定辄至20,掐火,20对最终质量来说或有 所损。

1. Struts2 的 Action 中可直接用属性来封装请求参数和处理结果,此谓之 属性驱动。也可以像 Struts1 那样使用专门的 ActionForm 来处理请求参数和结 果,只不过 Struts2 用的是一个更单纯的 POJO,这就做模型驱动;此时的 Action 需要实现 ModelDriven 接口,并实现其 getModel() 方法将 Action 与 对应 Model 相关联。

2. 例子说明采用模型驱动的 Action (UserBean 是一个普通 JavaBean,其中 定义了 username 和 password 两个属性):

public class LoginAction implments Action, ModelDriven<UserBean>{
UserBean model = new UserBean();
public UserBean getModel(){
return model;
}
}
上面例子使用了泛型,Struts2 的 Action 要使用一个模型不需要在配置文 件中作额外的配置。

3. 请求参数自动封装到模型中是由配置 struts-default.xml 中的 ModelDrivenIntercepter 来完成的。要输出模型中值时用标记 <s:property value="model.username"/>。而倘若写成了<s:property value="username"/>,Struts2 也会作智能处理,要是这个 Action 中未定义 username 属性,并且彩用了模型驱动模式,也会输出模型 model.username 属性 ,就像 Struts1 显示 ActionForm 一样可不写 name 属性。

4. Struts2 的异常处理,基本和 Struts1 一样的思维,都提供了声明式异常 处理方式,在 struts.xml 中配置。Struts2 的 <global-exception- mappings .../>、<exception-mapping .../> 分别与 Struts1 的 <global-exceptions .../>、<exception .../> 对应,作用都是声 明 Action 中出现何种类型的异常,转到对应页面,你的 Action 的 execute() 方法只管 throws Exception 就行,剩下的事框架帮你处理。

5. 异常信息的输出,<s:property value="exception"/> 输出异常对 象本身;<s:property value="exceptionStack"/> 输出异常堆栈信息,这 是 Struts1 没有的功能;<s:property value="exception.message"/> 输 出异常的 message 属性。至于标签输出异常国际化消息,可就要借鉴前面的知识 稍加斟酌一番,其实就是:如 execute() throw new Exception("name.error") ,要输出 name.error 对应消息用 <s:property value="%{getText (exception.message)}"/> 即可,如果找不到 name.error 对应消息,会直接 把 "name.error" 原本输出。