文档库 最新最全的文档下载
当前位置:文档库 › 20110411_Struts2高级

20110411_Struts2高级

1、课程名称:Struts2高级功能

2、知识点

2.1、上次课程的主要知识点

1、Struts2的参数接收

Struts1中通过ActionForm定义属性,并生成getter/setter方法来接收参数。

Struts2则是直接在Action中定义属性,并生成getter/setter方法来接收参数。

对于String类型来说,不管是用1还是2,都正常接收。

对于基本数据类型,Struts1可以自动转换,Struts2也可以自动转换。但Struts1如果输入错误,不自动验证,而是按照该参数的默认值处理(int类型就是0,double类型就是0.0),Struts2则是自动返回错误页,并将错误信息加入到fieldErrors 中,可以通过标签或EL表达式输出错误信息。(错误信息可以在全局属性文件中进行修改。)

对于日期类型(java.util.Date),Struts1不能自动转换,必须通过String,再手工使用SimpleDateFormat转型。

Struts2则可以自动根据输入的格式来进行转换,转换出错时,自动返回错误页,并提示错误信息(错误信息也可以按照基本数据类型的方式进行修改。),日期的格式是依据当前使用的区域和语言决定的(中文就是yyyy-MM-dd,英文就是MM/dd/yyyy),如果不想使用这种自动转换功能,可以参考Struts1,还使用String接收,手工通过SimpleDateFormat转型。

Struts1和Struts2都可以直接将参数设置到vo对象中,只需要将页面上的参数名改为:对象名.属性名即可。

Struts1在ActionForm中使用对象接收参数时,vo对象必须new对象来实例化,否则提示异常。

Struts2在Action中使用对象接收参数,vo对象可以不实例化,Struts2会自动完成对象的创建。

2、所有框架的配置文件

2.2、本次预计讲解的知识点

3、具体内容

3.1、OGNL和另一种分发。

分发Action除了使用!以外,还可以通过自行定义的方式来完成分发。

同时修改struts.xml,将Action配置也修改。

为每个方法和提交路径配置一个Action,这里的method表示执行的是newsaction中的对应方法。但这样配置比较麻烦,Struts2提供了通过通配符解决的方法。

*表示任意字符,{1}表示将第一个*的值取得,设置到这里。

这里就是method的值与news_*中的*的值一致。

OGNL是Struts2专用的表达式语言,只能在Struts2标签中使用。支持的语法与EL比较相似,但有区别。

EL是使用${属性名}取得属性,OGNL中是通过#属性范围.属性名的形式取得属性。

OGNL中不写属性范围,表示从Action的getter/setter方法中取得属性。

Struts2Action中的所有属性,会自动保存在一个Stack中,OGNL不写范围实际上就是从这个Stack中取值。

通过页面标签s:debug可以查看到。

EL不支持方法调用,但OGNL可以。

常用的Struts2标签:

判断:s:if,s:elseif,s:else,通过OGNL返回boolean类型数据来进行判断。

循环:s:iterator,通过value来设置要循环的对象,可以使用id定义临时保存的属性名,如果不写id,则可以直接将vo中的属性通过EL输出。

UI标签:s:form,s:textfield,s:textarea,s:submit,s:reset,s:select(直接将一个集合中的数据设置到select中,可以通过list属性设置,再通过listKey和listValue设置value和显示的文字),s:radio(使用方法与s:list相同。),s:checkboxlist(同s:radio),如果要设置默认选中或默认值,可以使用回填的形式。

UI标签使用前一定注意将theme设置为simple。

如果不使用UI标签也可以正常开发。

对于select和radio等选择框,如果不想通过集合来设置选项,也可以直接使用OGNL提供的类似JSON的语法来设置选项

其中:前是value值,:后是显示的文字。

Struts2也支持国际化,可以通过s:i18n和s:text标签来完成国际化功能。

也是编写多个属性文件,按照文件名_语言_国家.properies的形式来命名。

页面编写标签

错误信息也支持国际化,但要提前将全局属性文件拆分为多个。

同时写入错误信息时也不能直接使用中文,必须改为使用super.getText()方法来读取属性文件。

国际化还可以通过超连接选择语言来完成。

在Action中进行处理。

3.2、Struts2文件上传

Struts1文件上传时,在ActonForm中使用FormFile类型接收,并自定义输入和输出流,边读边写。Struts2与Struts1类似,只是接收的参数类型不再使用FormFile,直接用java.io.File接收。

注意,表单要封装。

在Action中定义同名的File属性接收。

测试后发现文件的确正确上传,但扩展名错误,改为了tmp临时文件。

Struts2上传时,并不是直接将文件保存,而是先保存到临时文件夹中,再从临时文件夹保存到要保存的upload目录下。在保存到临时文件夹时,文件的扩展名被自动替换为了.tmp。

为了处理这个问题,需要将文件的原有名称取得,这个原有名称在Struts2中通过一个属性自动保留,除了名称外还保留了类型。

可以定义两个属性来分别接收这两个值,属性名必须符合以下规则:

文件参数名+FileName

文件参数名+ContentType

Struts2还自带了文件大小和类型的验证功能。

但要使用就必须修改拦截器配置。

文件上传功能使用的是Struts2提供的FileUploadInterceptor。

需要将其配置修改,以便完成上传限制。

修改struts.xml,不再使用默认的拦截栈,改为自定义拦截栈

但错误信息还需要手工修改属性文件。

类型同样也可以通过配置来限制。

修改错误信息

以上可以完成大小限制和类型验证。

但Struts2默认只允许上传2M以内的文件,如果要修改这个限制,需要在struts.properties中加入文件上传大小限制。

4、总结

两种分发的使用,Struts2实现国际化,Struts2文件上传。

5、预习任务

Struts2的其他功能

iBATIS框架

6、作业

相关文档
相关文档 最新文档