Struts2权威指南总结2:Struts2的Hello World

来源:互联网 发布:hp什么意思网络用语 编辑:程序博客网 时间:2024/06/05 17:17

1,一定要多联系用普通文本编辑器开发程序。IDE可以提高高手的开发效率,但会使初学者更加白痴。

2,struts2的web应用默认需要java5的运行环境,需要web容器支持servletapi 2.4和jsp api 2.0,如果需要使用更低版本的Java运行环境,则需要使用struts框架的jdk1.4支持。建议使用java5,tomcat5.5或更高的版本。

 

3,在Action中,可以通过setter方法获取用户传入的属性,那么这个属性是什么时候被赋值到这个字段中的呢?在参数的传入过程中,需要通过拦截器,拦截器负责解析用户的请求参数,并将请求参数赋值给Action相应的属性。

 

4,struts.xml文件应该放在classes路径下,所以在开发时,将其放在src目录下即可。

 

5,struts2的Action接口定义了5个常量:

Public static final String SUCCESS = “success”;

Public static final String NONE = “none”;

Public static final String ERROR = “error”;

Public static final String INPUT = “input”;

Public static final String LOGIN = “login”;

一个抽象方法:

Public String execute() throwsException;

 

6,ActionContext提供了getSession()方法,但这个方法返回的不是HttpSession类型的对象,而是一个Map,因为struts2为了简化Action的测试,将Action类与Servlet API完全分离。虽然ActionContext的getSession()返回的不是HttpSession,但拦截器会负责这个Session和HttpSession之间的转换。

 

7,在Action中,也以通过getter和setter方法接收业务逻辑层传回的数据,例如从service层传回一个list集合,可以在Action中设置这个集合的getter和setter方法来接收,这个list属性封装了Action需要传入下一个JSP页面中显示的属性。

提示:Action中的成员属性,并不一定用于封装用户的请求参数,也可能是封装了Action需要传入下一个页面需要显示的值。实际上这些值将被封装在ValueStack对象中。

Action设置了属性值以后,struts2将全部的属性值全部封装在一个叫做struts.valueStack的请求属性里。转到jsp页面中以后,通过request.getAttribute(“strtus.valueStack”);获取全部的valueStack属性值。

从数据结构看,valueStack有点类似于map结构,但他比map更加强大,因为可以根据ognl表达式查询值,Action所有的属性都被封装到了ValueStack对象中,Action中的属性名可以理解为ValueStack中value的名字。

例如:在Action中使用voidsetBooks(String[] books){this.books = books},如果在Action中在这个通过这个set给books设置了值,则这个值就被存入了ValueStack对象中,在JSP页面中,可以通过如下方式取出值:

<%//获取ValueStack对象ValueStack vs = (ValueStack)request.getAttribute(“struts.valueStack”);//调用ValueStack的fineValue方法获取Action的books属性值String[] books = (String[])vs.fineValue(“books”);………迭代输出……………%>

8,struts2的国际化:

国际化思想:在页面中要显示国际化信息的地方,不是直接输出信息,而是输出一个key值,该key值在不同的语言环境下对应不同的字符串。当程序需要显示时,根据不同的语言环境,加载该key对应该语言环境下的字符串,就可以完成国际化。

国际化需要定义资源文件,例如在我们的资源文件中编辑:user=用户名  pass=密码。因为包含了非西欧字符,必须使用native2ascii来处理文件,资源文件保存在WEB-INF/classes中,名称为messageResource.properties,处理后的新文件名为messageResource_zh_CN.properties。

资源文件的名称格式:basename_语言代码_国家代码.properties。

使用MyEclipse的properties编辑器,输入中文,可以直接native2ascii。

再来一份英文文件:user=Username  pass=Password。保存为:messageResource_en_US.properties。

变换浏览器语言环境,就可以看到国际化信息。

Struts2的国际化资源文件,支持局部加载,和全局加载。

加载资源文件需要通过struts.properties文件来定义:

struts.costom.i18n.resource =messageResource(basename)

struts2默认在WEB-INF/classes中加载资源文件。

如果存放路径在WEB-INF/classes/xu路径,需要更改struts.properties配置:

struts.costom.i18n.resource =xu.messageResource

 

在JSP页面中显示国际化信息:

测试国际化,在控制面板中设置浏览器的语言区域选项即可。

注意:火狐的语言环境不受windows控制,需要手动修改火狐的语言环境,在火狐浏览器中修改。

 

9,Action的validate校验方法会在执行需要校验的方法之前执行,执行校验会将错误信息存放在Action的fieldError中,validate()方法执行之后,如果fieldError包含了数据校验错误,则请求将被转发到input逻辑视图处理。其实底层走的是拦截器,定义这个validate方法就是一个拦截器的方法,拦截器在Action之前执行,如果校验拦截器的fieldError中不为空,就返回input,交给input视图处理。

如果在JSP页面中使用struts的form表单,可以自动输出validate的校验信息,struts的form标签具备输出错误信息的能力。

校验信息国际化:ActionSupport提供了国际化的能力,提供了一个getText(String key)的方法,该方法用户从国际化资源中获取国际化信息,那么Action的validate校验中使用addFieldError方法添加错误信息的时候,就可以以如下形式生成国际化信息:

this.addFieldError(“username”,getText(“user.required”));

struts也支持xml配置文件校验,配置文件的方式比较常用。

校验文件命名规则:ActionName-validation.xml,存放位置要与该action在同一路径下。

 



原创粉丝点击