Struts2框架学习(四)

struts的表单数据验证方式

服务端Action验证

有两种方法,如图

 

 

 

 

 xml声明式验证

全局声明方式

在action包中声明UserAction-validation.xml文件

这种方式配置是全局配置,所有action的方法都会拦截验证

如果其它方法不想验证,可配置@SkipValidation注解

dtd约束可以在xwork-core的jar包中找

 

struts默认有很多种验证器类型,声明在default.xml中,注意default.xml位置

 

局部声明方式

在action包中声明UserAction-register-validation.xml文件

声明方式 Action类名-方法名-validation.xml

xml内容与上面的一样

验证器案例综合

add.jsp页面

 student模型

 Action

 struts.xml

 

 StudentAction-add-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
          "-//Apache Struts//XWork Validator 1.0.3//EN"
          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <!--
     1.  private String username;//不能为空,去空字符串
         requiredstring 比 required 好一点,会自动去除空格
     -->
    <validator type="requiredstring">
        <param name="fieldName">username</param>
        <message>用户名不能为空</message>
    </validator>
    
    
    <!--2.private int age;//18~100 
      1.表单的类型,会根据模型的属性类型去校验
     -->
     <validator type="int">
         <param name="fieldName">age</param>
         <param name="min">18</param>
         <param name="max">100</param>
         <message>年龄必须在18~100</message>
     </validator>
    
    
    <!-- 3.private String email;//正确邮箱格式-->
    <validator type="requiredstring">
        <param name="fieldName">email</param>
        <message>邮箱不能为空</message>
    </validator>
     <validator type="email">
         <param name="fieldName">email</param>
         <message>邮箱格式不正确</message>
     </validator>
         
     
     <!--4. private String password;//3~8 -->
     <validator type="requiredstring">
        <param name="fieldName">password</param>
        <message>密码不能为空</message>
    </validator>
    <validator type="stringlength">
        <param name="fieldName">password</param>
        <param name="minLength">3</param>
        <param name="maxLength">8</param>
        <message>密码长度为3~8</message>
    </validator>
    
    <!-- 5.private String repassword;//与密码一至 -->
    <validator type="expression">
        <param name="expression">
            <![CDATA[ password == repassword]]>
        </param>
        <message>密码不一至</message>
    </validator>
    
    <!-- 6.private int score;//必须是自然数
        regex :正则
     -->
    <!-- <validator type="regex">
        <param name="fieldName">score</param>
        <param name="regexExpression">\d+</param>
        <message>分数必须要数字</message>
    </validator> -->
    
    
    <!--     private String url;//必须是一个路径 http:// -->
    <validator type="url">
        <param name="fieldName">url</param>
        <message>URL格式不合法,以 http://开头</message>
    </validator>
    
    <!--     private String gender;//性别必填,只有男和女 -->
    <validator type="required">
        <param name="fieldName">gender</param>
        <message>性别必选</message>
    </validator>
</validators>

成绩字段错误提示中文

Struts2的国际化化

软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据

固定文本的国际化,例如:消息提示,错误提示和菜单,导航栏等等固定文本

 

创建一个消息资源包

一个资源包由多个文件组成,这些文件名都有命名规范:主要文件名_语言代码_国家代码.properties

语言代码和国家代码:有iso规定的

当文件只有主要文件名.properties时,表明它是默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包,

当没有时,找默认的

每个资源包的内容都由相同的key和对应语言环境的value组成。

比如:message_zh_CN.properties,message_en_US.properties

 

读取资源包中的内容

Java提供ResourceBundle类可以读取资源包的国际化配置文件

 JSP中使用国际化

 使用jstl标签来国际化

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签

除了这些,它还提供了一个框架来使用集成JSTL的自定义标签

首先需要在项目中导入两个jar包

 Jsp中代码如下

 Struts提供的国际化

前面的国际化与struts无关

 配置资源包

配置全局的资源包

在struts.xml中配置

 

 

 

 配置包范围的资源包

资源包名称命名规范:package_语言代码_国家代码.properties(固定的)。以此种命名方式的资源包能被该包及其子包中的动作类访问

优先级:高于全局消息资源包

 

 

局部消息资源包

资源包名称命名规范:动作类名称_语言代码_国家代码.properties。以此种命名方式的资源包,只为动作类服务。

优先级最高(就近原则)

 Struts2中资源包的搜索顺序

 读取资源包内容

jsp读取资源包内容

使用struts的标签s:text获取国际化内容

Action读取资源包内容

用ActionSupport的getText方法,可以读取到资源包的内容

也就是说这个Action一定要继承ActionSupport

这种在实际开发中几乎不用

自由指定读取资源包

在jsp页面可以使用s:i18n标签指向读取的国际资源包文件

 

 Strust2的拦截器

 拦截器的重要

Struts2中的很多功能都是由拦截器完成的。比如:servletConfig,staticParam,params,modelDriven等等

Struts默认的拦截器配置在struts-default.xml文件中

拦截器是AOP编程思想的一种应用形式

拦截器的部分类结构

 单个拦截器

创建拦截器,继承AbastractInterceptor,实现intercept方法

 

在struts.xml中配置拦截器,拦截器需要配置后才可使用

 Demo01Action.java

 

多个拦截器

invocation.invoke方法返回的就是视图

 拦截器的应用场景【登录】

首先准备四个login.jsp,main.jsp, studentList.jsp, teacherList.jsp 页面

当登录成功后,跳转到main.jsp,main.jsp的内容可以跳转到学生和老师列表

 UserAction

 登录验证拦截器

 拦截器配置

 案例中的问题

问题:由于我们写了自己的拦截器,默认的拦截器不起作用了

举个简单的例子,就是不可以接收请求参数

解决办法

把默认拦截器加到配置

 抽取一个拦截器的分组

 修改默认的拦截器

上面的配置坏处是每一个Action都配置拦截器,我们修改默认的拦截器配置,就可以简便我们的代码

 过滤不需要登录验证的方法

修改的默认的拦截器后,所有的Action方法都会被拦截,而登录方法是不需要拦截的

解决需要通过AbstractInterceptor类的子类入手,通过查看发现,该类还有一个子类是抽象的,可以通过MthodFilter过滤方法

 修改拦截器的继承结构

 修改struts.xml文件,注册过滤方法

上面遗留的问题:我们在声明时配置了哪些方法需要拦截,哪些方法不需要拦截。但是在没有写动作类和动作方法之前,不确定方法名叫什么。                                  

决办法:我们需要在使用拦截器的时候给它注入参数

 

Struts2的文件上传 

Struts也提供了内置标签用于文件上传<s:file>,我们称为文件选择域

与html的标签<input tyle=”file”>是一样用的

文件上传的必要前提条件:表单必须是post方法,enctype类型必须为multipart/form-data

jsp和action的代码

 Action接收到的File对象是一个临时文件,后面需要保存到另外一个路径去

 struts.xml的配置

 限制文件上传的类型

通过拦截器设置文件上传的扩展名或者MIME类型

 

 

 

文件上传错误的中文提示

默认的错误提示信息是在struts2-core.jar\org.apache.struts2\struts-message.properties中

解决办法:用国际化消息资源包,把对应的key取值改为中文即可

常用的key值

 在src目录创建一个fileuploadmessage.properties文件

 在struts.xml配置国际化

 配置文件上传的大小

默认情况下,struts的文件上传只允许在2M内

如果上传一个大于2M的文件,系统会报错,而且必要一个input回显结果

修改文件上传大小限制

思路在struts.xml中改变default.properties文件中的常量

 

 

 

多文件上传

多文件上传,在Action代码中,只需要把接收的文件字段设置为数组即可

 

 

文件下载

其实就是一种结果类型(Stream)

 Action代码

 struts.xml

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值