Struts2struts2处理请求参数及其校验
Posted shelly0307
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2struts2处理请求参数及其校验相关的知识,希望对你有一定的参考价值。
// 页面: 用户名 <input type="text" name="username" /> <br/> // Action : public class RegistAction1 extends ActionSupport { private String username; public void setUsername(String username) { this.username = username; } }
// 页面: 用户名 <input type="text" name="user.username" /> <br/> ----- 基于OGNL表达式的写法 // Action: public class RegistAction2 extends ActionSupport { private User user; public void setUser(User user) { this.user = user; } public User getUser() { return user; } }
// 页面: 用户名 <input type="text" name="username" /> <br/> // Action public class Login3Action extends ActionSupport implements ModelDriven<User> { private User user = new User(); public User getModel() { return user; } }
1) 封装数据到Collection 对象
// 页面: 产品名称 <input type="text" name="products[0].name" /><br/> // Action : public class ProductAction extends ActionSupport { private List<Product> products; public List<Product> getProducts() { return products; } public void setProducts(List<Product> products) { this.products = products; } }
2) 封装数据到Map 对象
// 页面: 产品名称 <input type="text" name="map[‘one‘].name" /><br/> =======one是map的键值 // Action : public class ProductAction2 extends ActionSupport { private Map<String, Product> map; public Map<String, Product> getMap() { return map; } public void setMap(Map<String, Product> map) { this.map = map; } }
1.校验的分类 :客户端数据校验 和 服务器端数据校验
客户端数据校验 ,通过javascript 完成校验 (改善用户体验,使用户减少出错 )
服务器数据校验 ,使用框架内置校验功能(struts2 内置校验功能 ) ----- 必须的
2、struts2 支持校验方式:
1)手工代码校验请求参数:在服务器端通过编写java代码,完成数据校验
缺点:代码校验 不适用于 大型项目, 流程数据复杂时,开发量和维护量 都会很大
2)Xml配置方式数据校验(企业主流校验):XML配置校验(主流) 和 注解配置校验
步骤一 :编写jsp
步骤二 :编写Action 继承ActionSupport 或者 实现 Validateable 接口
步骤三 :封装请求参数
* 使用xml校验 必须提供get方法
步骤四 :编写校验规则xml文件
a 在Action所在包 编写 Action类名-validation.xml 对Action所有业务方法进行校验
b 引入DTD
------ xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
c 内置校验器定义文件
xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml
d 内建校验器
* required (必填校验器,要求被校验的属性值不能为null)
* requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
* stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
* regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
* int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
* double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
* fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
* email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)
* url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)
* date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
e 案例:
required 必填校验器 <field-validator type="required"> <message>性别不能为空!</message> </field-validator> requiredstring 必填字符串校验器 <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> stringlength:字符串长度校验器 <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">2</param> <param name="trim">true</param> <message><![CDATA[产品名称应在2-10个字符之间]]></message> </field-validator> int:整数校验器 <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年龄必须在1-150之间</message> </field-validator> date: 日期校验器 <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>生日必须在${min}到${max}之间</message> </field-validator> url: 网络路径校验器 <field-validator type="url"> <message>主页地址必须是一个有效网址</message> </field-validator> email:邮件地址校验器 <field-validator type="email"> <message>电子邮件地址无效</message> </field-validator> regex:正则表达式校验器 <field-validator type="regex"> <param name="regexExpression"><![CDATA[^13\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator> fieldexpression : 字段表达式校验 <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(password==repassword)]]></param> <message>两次密码输入不一致</message> </field-validator>
f 如何对指定的方法校验:格式 Action类名-ActionName(<action>元素name属性)-validation.xml
例如 : 校验AddCustomerAction中execute方法 配置 <action name="addcustomer" .../> 校验文件名字: AddCusotmerAction-addcustomer-validation.xml
3)自定义校验规则(了解一下就行)
以上是关于Struts2struts2处理请求参数及其校验的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 统一参数校验统一异常统一响应,这才是优雅的处理方式!
关于spring mvc 请求参数校验使用中的坑 。 maven 生命周期,线程池杂识
springboot 实体参数校验 validate 抛出javax.validation.ConstraintViolationException异常 统一处理
Spring Boot 统一参数校验统一异常统一响应,这才是优雅的处理方式!
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)八(文件的上传FastDFS和校验)(Nginx的请求前缀配置,在发布项目的时候要注意)(代