struts2基于xml验证(最常用的三种类型String、Date、int验证)

合集下载

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。

如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。

我的E-MAIL:Max.M.Yuan@。

在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。

分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。

1.非UI标志o if、elseif和else描述:执行基本的条件流转。

参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。

在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。

Struts2 极速表单验证框架 说明书

Struts2 极速表单验证框架 说明书

1 Struts2极速表单验证框架使用说明书struts ‐plusStruts enhancement, includes quick form validation, permission mgmt. Struts 框架增强, 包括极速表单验证, 权限管理等.子模块之Struts 2 极速表单验证框架作者: 刘长炯(beansoft@)日期: 2010‐01‐20版本: 0.1修订历史2010‐01‐20 初始版1 Struts2极速表单验证框架使用说明书..................................................................................1 2 Struts 2 极速表单验证框架简介...........................................................................................2 3 项目许可...................................................................................................................................3 4 下载本项目...............................................................................................................................3 5 演示应用...................................................................................................................................4 6 整合步骤step by step...............................................................................................................8 7 验证规则表达式详解.............................................................................................................12 8 和RapidValidation 配合实现前后台一致验证.......................................................................13 9 如何扩展验证规则.................................................................................................................14 10 下一版本开发计划 (17)2 Struts 2 极速表单验证框架简介Struts Plus, Struts + 项目, 计划包含极速表单验证框架, 权限管理等子模块. 目前主要关注于 Struts 2 方面的生产力提高项目, 主要基于注解方式进行增强, 并提供抽象层, 使项目仅仅依赖于 Struts 本身, 而不需要强制您使用某种业务层和数据层框架. 项目的许可采用MIT协议, 您可自由的使用本项目, 但需遵循MIT协议保留本人版权签名及MIT协议本身.本文主要讲述子模块Struts 2 极速表单验证框架(Struts 2 QuickFormValidation).本验证机制基于表达式和注解(Annotation), 验证规则的扩展通过实现验证接口进行.诞生历史:2009年12月18日晚提出框架原理, 并于2009年12月19日晨提出实现思路, 最终框架核心初步完成于2009年12月20日(周日), 2010‐01‐20日整理发布.在项目的开发中, 表单验证需要用去开发者大量的时间, 尤其是为了保证前后台的验证规则一致时, 更是需要大量的人力物力. 虽然Struts 2本身的验证框架可以保证前后台一致, 但在使用和整合方式上, 需要编写大量的Validation XML文件, 费力费时容易出错, 尤其是实际开发中需要反复调整各种验证规则及其组合, 这时就更加困难; 扩展Struts 2的验证框架更是需要比较繁琐的步骤. 针对这些挑战, 笔者试图提供一种简便易用的方式来进行表单验证, 即基于Java注解和验证规则表达式.如下面的代码即可实现如下的验证要求: 1) 用户名不能为空, 最小长度5, 最大长度10, 只能输入英文字母; 2) 年龄字段只能输入数字, 最小值为18, 最大值为100; 验证失败时, 转向input页面并显示出错信息: ${validationErrors}.@FormValidator(input="form_tag", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;") public String form_tag() throws Exception {return SUCCESS;}•最快速的后台表单验证框架•简洁,快速的验证语法•无需编写验证提示信息•错误消息在指定地方显示•支持组合验证•易于扩展•基于标准的Java Annotation添加验证,易于和现有项目的无缝集成•特殊应用场景支持,如:密码确认,结束日期必须大于开始日期•支持前后台一致的验证规则本框架主要是为了和前台基于JavaScript的开源验证框架RapidValidation(/p/rapid‐validation/ )使用统一的验证规则, 最大限度的减少重复的后台验证代码, 使用方式简便, 扩展方便.本框架依赖于:z Struts 2z Java 5或者更高版本3项目许可The MIT LicenseCopyright (c) 2010 刘长炯(beansoft@)Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.4下载本项目您可访问/p/struts‐plus/downloads/list 来获取最新源代码包文件名说明大小struts2-quickvalidation-plugin-1.0-src.jar Struts 2 QuickFormValidation 26.81.0 sources 源码Featured KBstruts2-quickvalidation-plugin-1.0.jar Struts 2 QuickFormValidation1.0 jar Featured 26.8 KBstruts2-quickvalidation-demo.war 演示war包,部署至Tomcat6运行Featured 3.4 MBJavascript_RapidValidation.pdf JavaScript Rapid Validation框架的详细使用及规则说明文档(转载)176KB5演示应用可下载示例应用来体验Struts极速验证框架, 下载地址为:http://struts‐/files/struts2‐quickvalidation‐demo.war . 放入Tomcat后即可查看运行效果. 您可以本demo应用为基础快速的进行开发.本演示包含三个内容:纯后台表单验证前后台一致表单验证(前台验证基于RaplidValidation)前后台一致表单验证(Struts 2 Form 标签)本war包中的唯一的.java文件源码如下:package actions;import com.opensymphony.xwork2.ActionSupport;import common.validation.FormValidator;public class HelloWorldAction extends ActionSupport {// 或者implements Action {@FormValidator(input="form", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;" +"password,密码,required;" +"password2,重复密码,required equals-password-原始密码;" +"email,,validate-email;" +"gender,性别,validate-one-required;" +"ip,,validate-ip;" +"date,生日,validate-date;" +"num1,数字1,validate-number;" +"num2,数字2,validate-number less-than-num1-数字1;" +"float,数字范围,float-range-1-10;" +"address,地址,validate-chinese;" +"zip,邮编,validate-zip;" +"id_num,身份证,validate-id")public String form() throws Exception {return SUCCESS;}@FormValidator(input="form_js", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;" +"password,密码,required;" +"password2,重复密码,required equals-password-原始密码;" +"email,,validate-email;" +"gender,性别,validate-one-required;" +"ip,,validate-ip;" +"date,生日,validate-date;" +"num1,数字1,validate-number;" +"num2,数字2,validate-number less-than-num1-数字1;" +"float,数字范围,float-range-1-10;" +"address,地址,validate-chinese;" +"zip,邮编,validate-zip;" +"id_num,身份证,validate-id")public String form_js() throws Exception {return SUCCESS;}@FormValidator(input="form_tag", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;") public String form_tag() throws Exception {return SUCCESS;}}下面是三个演示的效果:6整合步骤step by step1. 将文件struts2‐quickvalidation‐plugin‐1.0.jar放入Web项目的WEB‐INF/lib目录下;2. 修改您自己的代码的src/struts.xml中的package定义继承自quickValidation;示例代码:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="test" namespace="" extends="quickValidation"> <action name="helloworld" class="actions.HelloWorldAction"> <result name="index">/index.jsp</result><result name="success">/helloworld.jsp</result></action></package></struts>3. 使用注解加入验证规则表达式;在每个需要调用的Action的入口方法处, 加入@FormValidator注解.注解的完整语法如下:@common.validation.FormValidator(input="出错时需要返回的result别名", enabled=true/false, value="表单参数名称1,表单参数中文提示信息1,规则1 规则2…; 表单参数名称2,表单参数中文提示信息2,规则1 规则2…;更多字段验证信息")input参数: 可选. 如果不指定, 则出错时仍然继续进入到Action方法中; 如果指定, 则在表单验证出错时, 返回到给定的result中, 例如: 原始表单输入页面或者统一的错误输出页面; enabled参数: 可选. 是否启用此验证规则, 如果不指定, 则忽略解析注解, 不进行任何验证; value参数: 必填选项, 可输入一个或者多个表单参数验证规则. 简单说就是: [字段1验证配置];[字段2验证配置];…. 虽然不建议, 然而字段验证配置可以留空, 此时不会进行任何验证处理.而每个验证配置的格式如下:表单参数名称: 必填选项. 指向输入的表单控件的名称(input的name);表单参数中文提示信息: 可选. 如果为空, 则和表单参数名称相同. 不为空时, 则显示在出错时的信息提示的开头位置;规则1 规则2…: 可选. 理论上可加入任意多个验证规则, 以单个空格隔开. 在验证开始后, 依次进行每个规则的验证并加入提示信息. 需要注意的是, 除required规则之外的所有规则只有当用户输入的字段值非空时, 才进行有效性验证, 如此便可避免所有字段都成为必填字段的问题发生.每个规则本身则由两部分组成: 规则名‐规则子名‐参数1‐参数2‐参数3‐….规则名和规则子名是固定名称, 不能任意填写, 这两个名称对应一个具体的规则实现类.其中参数是必填选项, 参数的意义则需要参考下一节的验证规则表达式中的说明. 下面举例说明若干验证规则:required 这是特殊规则, 不带规则子名, 也没有额外的参数;float‐range‐1‐20 其中float‐range分别是规则名和规则子名, 而1和20则分别是两个参数. 特别需要注意的是有负数时的情况此时参数列表变为: float-range--1--20, 此时参数值分别为‐1和‐20.如果需要给另一字段加入验证规则, 则以分号隔开.下面是若干验证的示例及其解释:规则 解释@FormValidator 空的验证规则, 不进行任何操作@FormValidator("username,用户名,required min‐length‐5") 对username字段进行验证, 规则为必填, 最小长度为5; 出错时分别提示:用户名不能为空用户名的长度不能小于5, 当前长度为1.由于没有指定input参数, 所以当验证失败时, 仍然会继续进入到业务逻辑处理, 相关的错误信息则存入request 的attribute中.@FormValidator("username, ,required min‐length‐5")由于没有指定字段的中文提示, 因此出错时将提示:username的长度不能小于5, 当前长度为1.@FormValidator(input="index",value=" username,用户名,required min‐length‐5”) 这大概是最常用格式的验证规则的写法了. 此例和上例的区别为: 所以当验证失败时, 将进入input参数所指定的出错信息显示页面.@FormValidator(input="index",enabled=false,value=" username,用户名,required min‐length‐5”) 忽略所有验证规则处理, 常用于调试阶段.@FormValidator(input="index",value=" username,用户名,required min‐length‐5;password2,重复密码,required equals‐password‐原始密码;”) 此规则加入了对重复密码字段的验证, 出错时将提示:重复密码和原始密码的输入不一致@FormValidator(input="index",value="username,用户名,required min‐length‐5;password2,重复密码,required equals‐password;”) 此规则省略了另一字段的中文描述, 出错时将提示:重复密码和前面的输入不一致以下为一个完整的Action类示例代码:import com.opensymphony.xwork2.ActionSupport;import common.validation.FormValidator;public class HelloWorldAction extends ActionSupport {@FormValidator(input="index", value="username,用户名,requiredmin-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18max-value-100;password,密码,required;" +"password2,重复密码,required equals-password-原始密码;" +"gender,性别, validate-one-required")public String execute() throws Exception {return SUCCESS;}}4. 修改前台显示验证结果.根据Action的不同, 前台的显示划分为两类:普通的错误显示:所有错误信息: ${validationErrors}返回的内容是一个字符串, 显示了所有的出错信息, 而出错字体的颜色则需要用户自己去设置.出错信息的显示格式是以<br>分开的, 例如:用户名不能为空<br>密码不能为空<br>重复密码不能为空<br>性别必须至少选中一项<br>另一种推荐的做法是让Action继承自Struts2中的ActionSupport, 此时则可用Struts 2的标签来显示出错信息, 可定位到具体的字段:<%@ taglib prefix="s" uri="/struts-tags" %><s:actionerror /><s:fielderror/><s:form action="helloworld.action" method="post"><s:textfield name="username" label="用户名" /><s:password name="password" label="密码" /><s:submit/></s:form>或者使用纯JSP来编写页面来定位到单条错误:用户名: <input name=username value=${ername}> ${ername[0]}下面给出这两种写法的完整示例:<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html><head><style>.errorMessage {color:red;}.errorLabel {font-weight:bold}</style><title>测试页面</title></head><body><s:actionerror /><form action="helloworld.action" method=postenctype="multipart/form-data">用户名: <input name=username value=${ername}>${ername[0]} <br>年龄: <input name=age value=${param.age}><br>密码: <input name=password><br>密码重复: <input name=password2><br>邮件: <input name=email><br>性别: <input type=checkbox name=a>男<input type=checkbox name=a>女<br> IP地址: <input name=ip><br>数字1: <input name=num1>数字2: <input name=num2><br>日期:<input name=date><br>附件: <input name=file type=file><br><input type=submit value="提交"></form><span class="errorMessage">${validationErrors}</span>Struts 2表单标签示例:<s:fielderror/><s:form action="helloworld.action" method="post"><s:textfield name="username" label="用户名" /><s:password name="password" label="密码" /><s:submit/></s:form></body></html>7验证规则表达式详解说明: 加红色背景的部分是目前尚不支持的验证规则; 加黄色背景的是增加了第二个可选参数的规则(和前台验证规则略有变动).验证表达式 描述 示例 required 非空域,全部空格也算空validate-number 一个有效数validate-digits 只能包含0-9任意个数字validate-alpha 只能是字母a-z, A-Zvalidate-alphanum 只能是字母和数字的组合validate-email 只能是有效的emailvalidate-url 只能是有效的url地址validate-one-required 至少有一个被选中,例如一组checkbox, radiobutton,它们最好包含在一个div和span中validate-integer 只能是整数,可以有正负号validate-ip 有效的IP地址min-length-$number 最小长度是$number (此处$some表示一个特定的值)最小长度为8: min-length-8max-length-$number 最大长度是$number 最大长度为8:max-length-8 max-value-$number 输入域的最大值是$number 最大值为8.1:max-value-8.1 min-value-$number 输入域的最小值是$number 最大值为-8.1:max-value--8.1equals-$otherInputId-$othe rInputLabel 必须和某个input field相等,用于密码两次输入验证等,$otherInputLabel是可选项,用来描述另一字段信息equals-password重复密码和原始密码输入不一致:equals-password-原始密码less-than-$otherInputId-$o therInputLabel 小于某个input fieldless-than-otherInputId,多用于结束日期不能小于开始日期的需求,$otherInputLabel是可注:相等时也不能通过选项,用来描述另一字段信息great-than-$otherInputId-$ otherInputLabel 大于某个input fieldless-than-otherInputId,$o therInputLabel是可选项,用来描述另一字段信息validate-date-$dateFormat 只能是日期,$dateFormat为日期格式,$dateFormat的可选,默认格式为yyyy-MM-DD validate-date-yyyy年MM月dd 日validate-file-$type1-$type 2-$typeX 验证文件输入域选择的文件类型只能为声明的$type1 –$typeX中的一种validate-file-png-jpegfloat-range-$minValue-$max Value 必须是$minValue到$maxValue的一个浮点数1至20:float-range-1-20int-range-$minValue-$maxVa lue 必须是$minValue到$maxValue的一个整数length-range-$minLength-$m axLength 输入字符串的长度必须在$minLength到$maxLength之间validate-pattern-$RegExp 通过自定义正则表达式$RegExp来验证输入域的正确性 vaidate-patter n-/a/givalidate-chinese 只能是中文(以下为中国的相关验证)validate-phone 有效的电话validate-mobile-phone 有效的手机号validate-id-number 验证是否有效的身份证号码validate-zip 验证邮政编码validate-qq 验证QQ号码8和RapidValidation配合实现前后台一致验证RapidValidation (/p/rapid‐validation/) 是专注于前台的验证框架, 例如下面的例子:<!-- 为form增加required-validate class,标识需要验证form --><form id='helloworld' action="#" class='required-validate'> helloworld:</br><!--通过class添加验证: required表示不能为空,min-length-15表示最小长度为15 --><textarea name='content' class='requiredmin-length-15'></textarea></br><input type='submit' value='Submit'/><input type='reset' value='Reset'/></form>其对应的后台验证规则为:@FormValidator(input="index",value=" content,helloworld,required min‐length‐15”)请注意比较异同, 不同部分已经以红色粗体进行了区分, 相同部分则以绿色粗体标识.大家可以看到, 两者很容易就实现了一致的前后台验证规则.相关的说明文档请访问: /p/rapid‐framework/wiki/rapid_validation , 另外本项目也提供了一份完整文档的转载, 包含详细的规则说明文档和整合步骤:(http://struts‐/files/Javascript_RapidValidation.pdf ).9如何扩展验证规则要扩展验证只需要实现IValidator即可即可, 并将实现类放入包 common.quickvalid.validators下. 下面是IValidator接口定义:package common.quickvalid.validators;import java.util.Map;/***所有验证器的抽象接口.*@author beansoft*日期:2009-12-20*/public interface IValidator {/***实现验证方法.*@param fieldName字段name*@param fieldDescription出错时的字段描述信息*@param params参数列表<String key, String[] values>表单参数Map *@param args参数列表*@return验证信息,为空时表示没有任何出错信息,通过验证*/public String doValidation(String fieldName, String fieldDescription, Map<String, String[]> params, String... args) ;/***获取验证器本身的参数列表.*@return*/public String[] getArgs();/***设置验证器本身的参数列表*@param args-一个或者多个参数,允许为null*/public void setArgs(String[] args);/***获取原始表达式.*@return*/public String getExpression();/***设置原始表达式,用于日期,正则等验证方式,避免和-号冲突.*@param Expression*/public void setExpression(String expression);}在实践中, 已经提供了几种比较常见的实现类的抽象基类, 它们是:BaseValidator, 抽象的验证器实现, 仅实现了 setter和getter;BaseRegexValidator(继承自BaseValidator), 基于正则表达式验证的基类; BaseTwoNumberValidator(继承自BaseValidator), 提供基于两个数字规则的验证, 可获取两个参数(含‐号).类名有一定规则, 将第一个减号替换为下划线即可, 例如:float-range-$minLength-$maxLength 对应的类名是: length_range.下面则给出一些实现类, 供参考:手机号的验证:package common.quickvalid.validators;/***手机号验证*TODO更多号段的支持?*@author beansoft**/public class validate_mobile extends BaseRegexValidator {@Overridepublic String getMessage() {return"只能输入正确的手机号码,如:138********";}@Overridepublic String getRegEx() {return"(^0?[1][35][0-9]{9}$)";}}数字范围的验证:package common.quickvalid.validators;import java.util.Map;/***表单域取值浮点数验证*@author beansoft**/public class float_range extends BaseTwoNumberValidator {public String doValidation(String fieldName, String fieldDescription,Map<String, String[]> params, String... args) { super.setParams(params);String value = getValue(fieldName);super.parseTwoNumberArgs();//重新分析=args// 非空时进行验证if(value != null && value.length() > 0) {boolean result = false;try {(Double.parseDouble(value) <=resultDouble.parseDouble(args[0])) ||(Double.parseDouble(value) >Double.parseDouble(args[1]));} catch(Exception ex) {return fieldDescription + "的输入值不是有效的数字";}if(result) {return fieldDescription + "的输入值" + value + "应该为" + args[0] + "到" + args[1] + "之间的数字";}}return null;}}10下一版本开发计划z将验证规则表达式解析和执行部分独立出来作为核心引擎z兼容JDK 1.4 并提供独立调用的接口z提供Struts 1下的插件机制z提示文字国际化z增强前台验证, 提供时分秒的验证功能如果您对本项目有兴趣, 欢迎加入.。

08_struts2_表单验证

08_struts2_表单验证

* 要校验指定的方法通过重写validateXxx()方法实现, validateXxx()只会校验action中
方法名为Xxx的方法。其中Xxx的第一个字母要大写。
* 当某个数据校验失败时,调用addFieldError()方法往系统的fieldErrors添加校验失败
2、Action中
* 要继承ActionSupport
* 重写Validateable接口中的validate()方法 ,在该方法中完成验证
3、* 要进行验证:
* * 需求:
* * 用户名不能为null ,""
* * 密码不能为null, "" 并且密码的长度6-12之间
【3、配置验证的xml文件】
* 验证的xml文件的规范在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd
* 验证文件的命名
* 在这个校验文件中,对action中字符串类型的username属性进行验证,
首先要求调用trim()方法去掉空格,然后判断用户名是否为空
return "success";
}
public String test(){
System.out.println("test^^^^^^6");
return "success";
}
public String getUsername() {
return username;
【7、在xml中配置验证出错信息】
<result name="input">/validate/login.jsp</result>

2struts2中常用的配置文件及result返回类型

2struts2中常用的配置文件及result返回类型

1.web.xml文件主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。

这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml 配置文件,还有的会影响struts框架的行为。

除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。

2.struts.xml文件框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。

在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。

这也是我们要配置的主要文件3.struts.properties(参default.properties)在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。

要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。

属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。

我们可以在struts-default.properties文件中找到一个属性的列表。

4.struts-default.xml此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过<package extends="struts-default">),并为我们提供了一些标准的配置。

struts2之struts.xml详解

struts2之struts.xml详解

struts2之struts.xml详解1.struts.xml概述struts.xml 为Struts 2的核心配置文件。

struts.xml中主要配置Struts项目的一些全局的属性,用户请求和响应Action之间的对应关系,以及配置Action 中可能用到的参数,以及处理结果的返回页面。

还包括各种拦截器的配置等。

struts.xml的DTD(Document Type Definition)描述如下:<!ELEMENT struts (package|include|bean|constant)*><!--struts标签下可以出现下面标签0次或多次package:将多个action组织成一个package的方式。

include:用来包含一个配置文件,目的是为了配置文件能够分离。

bean:被容器的框架创建,并注入到框架内部的对象。

主要用来关联第三方类库,比如spring,一般应用程序不需要配置。

contant:用来设置Struts2运行的环境。

效果等同于在struts.properties中配置,或者web.xml中配置FilterDispatcher的init param--><!ELEMENT package (result-types?, interceptors?,default-interceptor-ref?, default-action-ref?, global-results?,global-exception-mappings?, action*)><!--package标签下可以出现下面标签0次或者1次result-types:用来定义结果类型interceptors:用来定义拦截器default-interceptor-ref:为package定义默认使用的拦截器,这个package 中所有的action(如果这个action没有设置自己使用的拦截器)都会调用设置的默认拦截器default-action-ref:这个package默认使用的actionglobal-results:为这个package设置共通使用的result,对这个package下的所有action都有效global-exception-mappings:为这个package定义共通的当发生异常的时候,所用到的result,需与global-results结合使用package标签下可以出现下面标签0次或者多次action:为这个package定义action信息。

Struts2校验器类型详解

Struts2校验器类型详解

Struts2校验器类型详解一、Struts2内建校验器位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。

default.xml文件定义了常用的校验器类型。

首先搞清楚:struts2字段校验器与非字段校验器的区别字段校验器配置格式:<field name="被校验的字段"><field-validator type="校验器名"><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param>....................<!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></field-vallidator><!-- 如果校验字段满足多个规则,下面可以配置多个校验器--></field>非字段校验器配置格式:<validator type="校验器名"><param name="fieldName">需要被校验的字段</param><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param><!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></validator>非字段校验:先指定校验器:由谁来校验,来校验谁!字段校验器:先指定校验的属性:我来校验谁,由谁来校验!下面是对应在包中的类:<validators><validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/><validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/><validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/><validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/><validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/><validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/><validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/><validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/><validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/><validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/><validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/><validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/><validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/><validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/><validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/><validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators>二、各种类型校验器1、类型转换检验器:(1)非字段校验:<validator type="conversion"><param name="fieldName">myField</param><message>类型转换错误</message><param name ="repopulateField">true</param></validator>(2)字段校验:<field name="myField"><field-validator type="conversion"><message>类型转换错误</message><param name ="repopulateField">true</param></field-validator></field>fieldName:该参数指定检查是否存在转换异常的字段名称,如果是字段校验,则不用指定该参数。

struts2-3类型转换与验证

struts2-3类型转换与验证

基于struts2的类型转换器 的类型转换器 基于
Softeem Consultancy Service
Struts2内建的类型转换器 内建的类型转换器
Struts2给我们提供了常用的类型转换 给我们提供了常用的类型转换 boolean 和Boolean char和Character 和 int和Integer 和 long和Long 和 float和Float 和 double和Double 和 Date:完成字符串和日期的转换 : 数组:默认是数组, 数组:默认是数组,可以是其他类型的数组 集合:如果是String,创建一个新的 集合:如果是 ,创建一个新的ArrayList封装 封装
Softeem Consultancy Service
第三章
struts2类型转换 类型转换
Softeem Consultancy Service
本章任务
为什么要类型转换 Struts 2 对类型转换的支持 Struts2与国际化 与国际化 输入校验 文件上传和下载 小结
Softeem Consultancy Service
OGNL实现类型转换器 实现类型转换器
</s:form>
public class DateTypeConverter extends StrutsTypeConverter {
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
Softeem Consultancy Service
数组和集合属性的类型转换
为什么需要数组类型的转换
怎么转换数组和集合类型的数据 Struts2的Collection和Map支持 的 和 支持

struts2中struts.xml配置文件详解

struts2中struts.xml配置文件详解

struts2中struts.xml配置⽂件详解struts.xml的常⽤配置<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "/dtds/struts-2.3.dtd"><struts><!-- 所有匹配*.action的请求都由struts2处理 --><constant name="struts.action.extension" value="action"/><!-- 是否启⽤开发模式 --><constant name="struts.devMode" value="true"/><!-- struts配置⽂件改动后,是否重新加载 --><constant name="struts.configuration.xml.reload" value="true"/><!-- 设置浏览器是否缓存静态内容 --><constant name="struts.serve.static.browserCache" value="false"/><!-- 请求参数的编码⽅式 --><constant name="struts.i18n.encoding" value="utf-8"/><!-- 每次HTTP请求系统都重新加载资源⽂件,有助于开发 --><constant name="struts.i18n.reload" value="true"/><!-- ⽂件上传最⼤值 --><constant name="struts.multipart.maxSize" value="104857600"/><!-- 让struts2⽀持动态⽅法调⽤ --><constant name="struts.enable.DynamicMethodInvocation" value="true"/><!-- Action名称中是否还是⽤斜线 --><constant name="struts.enable.SlashesInActionNames" value="false"/><!-- 允许标签中使⽤表达式语法 --><constant name="struts.tag.altSyntax" value="true"/><!-- 对于WebLogic,Orion,OC4J此属性应该设置成true --><constant name="struts.dispatcher.parametersWorkaround" value="false"/><package name="basePackage" extends="struts-default"></package></struts><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd" ><struts><!-- include节点是struts2中组件化的⽅式可以将每个功能模块独⽴到⼀个xml配置⽂件中然后⽤include节点引⽤ --><include file="struts-default.xml"></include><!-- package提供了将多个Action组织为⼀个模块的⽅式package的名字必须是唯⼀的 package可以扩展当⼀个package扩展⾃另⼀个package时该package会在本⾝配置的基础上加⼊扩展的package的配置⽗package必须在⼦package前配置name:package名称extends:继承的⽗package名称abstract:设置package的属性为抽象的抽象的package不能定义action 值true:falsenamespace:定义package命名空间该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action --><package name="com.kay.struts2" extends="struts-default" namespace="/test"><interceptors><!-- 定义拦截器name:拦截器名称class:拦截器类路径--><interceptor name="timer" class="com.kay.timer"></interceptor><interceptor name="logger" class="com.kay.logger"></interceptor><!-- 定义拦截器栈 --><interceptor-stack name="mystack"><interceptor-ref name="timer"></interceptor-ref><interceptor-ref name="logger"></interceptor-ref></interceptor-stack></interceptors><!-- 定义默认的拦截器每个Action都会⾃动引⽤如果Action中引⽤了其它的拦截器默认的拦截器将⽆效 --><default-interceptor-ref name="mystack"></default-interceptor-ref><!-- 全局results配置 --><global-results><result name="input">/error.jsp</result></global-results><!-- Action配置⼀个Action可以被多次映射(只要action配置中的name不同)name:action名称class: 对应的类的路径method: 调⽤Action中的⽅法名--><action name="hello" class="com.kay.struts2.Action.LoginAction"><!-- 引⽤拦截器name:拦截器名称或拦截器栈名称--><interceptor-ref name="timer"></interceptor-ref><!-- 节点配置name : result名称和Action中返回的值相同type : result类型不写则选⽤superpackage的type struts-default.xml中的默认为dispatcher--><result name="success" type="dispatcher">/talk.jsp</result><!-- 参数设置name:对应Action中的get/set⽅法--><param name="url"></param></action></package></struts>⼀个Action内包含多个请求处理⽅法的处理Struts1提供了DispatchAction,从⽽允许⼀个Action内包含多个请求处理⽅法。

struts2校验框架

struts2校验框架
二十六、对于Action级别的错误信息,实际上是放置在ArrayList中的。
二十七、action的getFieldErrors()方法返回的是一个不可以增加错误,它返回的是一个新的或不可修改的action。getFieldErrors()返回的是一个原来LinkedHashMap的一个复本,所以不可以从这里添加,它是只读的。
二十、在校验框架里validator是非字段校验,其中type属性对应的校验的类型如:required、requiredstring、int、long、short、double、date、expression、fieldexpression、email、url、visitor、conversion、stringlength、regex、conditionalvisitor;里面的第一个param的name属性一定要是fieldName而值是要校验的字段其余的param与message与字段校验里的一样。
十一、param是一个字符串,它也有一个name属性也是字符串类型的,name属性对应default.xml里类型所实现的类里的属性名,值为自己的要求。
十二、message也是一个字符串,字有一个属性key也是字符串类型的,它可以提供也可以不提供。message的值是用户提示的错误信息,它里面是可以国际化的。
十七、struts2会给自己的标签生成ID但是如果指定了ID就不会生成ID了,以指定的为标准。
十八、当多个业务逻辑方法的时候,准确的说应该是一个逻辑方法对应一个校验方式,校验文件应该是:action类名+“-”+方法名+“-validation.xml”。如果也有action的类名+“-validation.xml”的文件它会先执行action的类名+“-validation.xml”的再执行action类名+“-”+方法名+“-validation.xml”,所有如果有多个逻辑方法时就写多个action类名+“-”+方法名+“-validation.xml”的校验文件。

软件开发框架(J2EE)Struts 2内置校验器

软件开发框架(J2EE)Struts 2内置校验器

必填字符串校验器实例
1. 修改上例中校验规则文件ProductAction-validation.xml。
2. 运行程序,请求add_pro.jsp,查看必填字符串校验器的用 法。
软件开发框架(J2EE)
字符串长度校验器
• 字符长度校验器(stringlength)用于确保字段必须满足指定的 长度范围,否则校验失败。此校验器的参数如下:
参数名
必选 类型
பைடு நூலகம்
说明
maxLength 否
minLength 否
trim

Integer Integer Boolean
用于指定字符串的最大长度。若不指定, 则表示字符串的最大长度不限
用于指定字符串的最小长度。若不指定, 则表示最小长度不限
表示在校验此字符串之前,删除字符串的 首尾空格,默认值为true
• 实例:对商品名称进行非空字符串校验。本例通过在校验规则文件
中使用requiredstring校验器,对商品名称进行非空字符串校验。
• 步骤:
1. 修改上例中校验规则文件ProductAction-validation.xml
2. 运行程序,请求add_pro.jsp,查看必填字符串校验器的用法
软件开发框架(J2EE)
max

min

类型 date
date
说明
用于指定被校验属性的最大日期值。若不指定,则表示 最大日期值不限
用于指定被校验属性的最小日期值。若不指定,则表示 最小日期值不限
• 实例:对学生的出生日期进行校验。本例通过使用date校验器对新
添加学生的出生日期进行校验,使其出生日期必须在1985-0101~1994-12-31之间。

struts2资料2

struts2资料2

Struts2 标签库详解Struts2标签库包括:OGNLStruts2标签分类控制标签:(if, elseif,else, iterator, append, merge, generator, subset, sort)数据标签:(bean, param,date, debug, include, set, url, push)OGNLObject-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(ExpressionLanguage,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性:,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。

Struts2默认的表达式语言是OGNLOGNL的符号--#:1、访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() .2、构造Map用于过滤和投影(projecting)集合?——所有匹配选择逻辑的元素^——只提取符合选择逻辑的第一个元素$——只提取符合选择逻辑的最后一个元素范例:<s:iterator value="#{'china':'中国','usa':'美国','e':'俄国'}" var="c"><s:property value="#c.key"/>--<s:propertyvalue="#c.value"/><br/></s:iterator>范例:<s:property value="#attr.list.{sname}[0]"/><s:property value="#attr.list.{$#this.sid== 3}.{sname}[0]"/>支持对象方法调用:<s:property value="#attr.p.doSomeThing('李四')"/>调用保存在pageContext中的Student对象的doSomeThing()[N]语法:从ValueStack的第N个位置开始取值top关键字:取出最顶端的对象示例::<s:push value="'阿拉伯联合酋长国'"><s:property value="[0].top"/></s:push>从ValueStack中的第0个位置开始取出最顶部的对象,返回为”阿拉伯联合酋长国”Struts2标签分类1.分类:Struts2标签库:用户界面标签库(表单/非表单标签库),非用户界面标签库(控制标签库,数据访问标签库),ajax支持标签库2.导入taglib<%@taglib prefix=“s”uri=“/struts-tags” %>控制标签1、条件标签if…elseif…else主要属性:: test : 测试条件范例:<%! Random rnd = newRandom(); %><% int n = rnd.nextInt(200);pageContext.setAttribute("n", n); %><s:if test="#attr.n % 7 == 0">恭喜,您中了一等奖! </s:if><s:elseif test="#attr.n % 5 ==0">恭喜,您中了二等奖! </s:elseif><s:else>欢迎惠顾!</s:else>2、迭代标签iterator用于循环数组,集合和Map属性:value:数组,集合或Mapvar:当前元素status:当前元素的状态index,count,even,odd,first,last示例:遍历List<s:iterator value="{'中华人民共和国', '美利坚合众国', '阿拉伯联合酋长国'}" var="cur"status="st"><s:property value="#st.count"/><s:property value="#cur"/><br/></s:iterator>遍历Map<s:iterator value="#{1: '中国', 2: '美国', 3: '日本'}" var="cur"><s:property value="#cur.key"/><s:property value="#cur.value"/><br/></s:iterator>3、集合合并标签append和merge将多个集合合并成一个集合属性::var - 新集合的名称示例:<s:appendvar="newCollection"><s:param value="{'中国', '美国', '日本'}"></s:param><s:param value="{'德国', '泰国', '新加坡'}"></s:param></s:append><s:iterator value="#newCollection"var="cur"><s:property value="#cur"/><br/></s:iterator>注:merge用法和append相同,结果的组织不一样.4、字符串分割标签generator将一个字符串按照指定分隔符分割成一个字符串数组separator: 分隔符val(value): 字符串count:字符串數組中元素個數示例:<s:generator separator=","val="'中,华人,民共和,国'" var="arr"/><s:iterator value="#arr"var="cur"><s:property value="#cur"/><Br/></s:iterator>5、集合子集标签subset从集合中取出一个子集,注意:子集被放在值栈的顶部,subset标签执行完后子集自动移除属性::source: 集合start: 起始索引count: 子集中元素个数示例:<s:subset source="{'中国', '美国', '日本', '德国', '泰国', '新加坡'}" start="1"count="3"><s:iterator var="cur"><s:property value="#cur"/></s:iterator></s:subset>6、排序标签sort根据定义的排序规则,对集合中的元素进行排序,排序后生成的新的集合放在值栈顶部,标签结束后自动删除.属性::comparator: 实现Comparator的类source: 集合示例:<s:bean name="com.aptech.sorted.LengthSorted"var="ls“/><s:sort comparator="#ls"source="{'中1','88w','777','6666'}"><s:iterator><s:property/><br/></s:sort>数据标签1、设置变量标签set用于设置一个新变量,并将新变量放入指定的作用域中属性:Var: 新变量的引用Value:值示例:<s:set var="v1"value="'中华人民共和国'" scope="page"></s:set><s:property value="#attr.v1"/>注:如果不指定,默认放在Stack Context中2、栈顶置值标签push将某个值置于值栈的顶部,标签结束后,将从值栈中移除.属性:value: 即值示例:<s:push value="'中华人民共和国'" ><s:property/></s:push>3、javabean创建标签bean用于创建javabean的实例,如果设置了var值,则存于Stack Context,否则,标签结束后自动移除. 属性:name: javabean类名(带包)var: 名称示例:<s:bean name="com.aptech.entity.Student"var="stu"><s:param name="sid">1</s:param><s:param name="sname">张三好</s:param><s:param name="sbirthday">2009-9-9</s:param></s:bean><s:property value="#stu.sbirthday"/>4、日期格式化标签date格式化日期并输出属性:name:日期format:格式化字符串示例:<%pageContext.setAttribute("d", new Date()); %><s:date name="#attr.d"format="yyyy年MM月dd日HH时mm分ss秒"/> 5、调试标签debug用于当前环境下Value Stack和stackcontext中保存的数据6、资源包含标签include用于将一个html,jsp或servlet包含到当前页面中,使用param传递参数属性:value:包含页面名称示例:<s:include value="MyHtml.html"></s:include>7、URL生成标签url生成URL地址,可以通过param标签传递请求参数,如果参数为中文,自动编码属性:value: url值action: action名称,自动加上.action示例:<s:url value="control.jsp"var="url"><s:param name="id">中华人民共和国</s:param></s:url><a href="<s:propertyvalue="#url" />">链接</a><s:url action="test"var="url2"></s:url><s:property value="#url2"/>8、数据输出标签property用于输出值栈,Stack Context中的数据属性:value:要输出的值如果输出值栈中的值,不用#如果输出Stack Context中的值,要用#如果省略value,表示取出值栈的栈顶对象输出总结OGNL是标签的基础,要理解OGNL的基本使用,在struts2中,OGNL必须和标签紧密配合控制标签包含一组条件判断标签和一组集合遍历和操作标签数据标签包含一组数据访问相关的标签。

[精华]Struts2.O内置校验器

[精华]Struts2.O内置校验器

Struts 2.O内置校验器(checker)Struts 2.0框架提供了大量的内置校验器,实际中的大部分校验需求都可以通过内置校验器来完成,开发者只需配置好这些校验器即可。

内置校验器就是struts框架提供的有各种校验功能的类。

Struts 2.0的内置校验器有很多,比较常用的有:必填校验器(required);必填字符串校验器(requiredstring);字符串长度校验器(stringlength);整数校验器(int);日期校验器(date);邮件地址格式校验器(email);网址格式校验器(url);转换校验器(conversion);表达式校验器(expression);字段表达式校验器(fieldexpression);正则表达式校验器(regex) ;等。

要想使用内置校验器,需要为你的Action创建校验器配置文件(xml文件),文件名的规定为:<Action的名字>-validation.xmlStruts 2.0提供了两种风格的校验配置文件,两种风格的本质是一样的。

即:●字段校验器配置风格,基于Action的属性名。

(建议用这个)●校验器字段配置风格,基于校验器名。

一、字段校验器配置风格(风格一)在<validators…/>元素内,以<field name="..."/>元素为基本元素,形式如下:<validators><field name="被校验的属性名1"><field-validator type="校验器名"><param name="参数名">参数值</param><!…可以有多个参数---><message>校验失败的显示信息</message></field-validator></field><field name="被校验的字段名2">……………………</field></validators>二、校验器字段配置风格(风格二)在<validators…/>元素内,以<validator type="..."/>元素为基本元素,形式如下:<validators><validator type="校验器名"><param name="fieldName">字段名1</param><message>效验失败的显示信息< /message></validator><validator type="校验器名"><param name="fieldName">字段名2</param><message>效验失败的显示信息< /message></validator>……………………</validators>三、例1、使用“必填字符串校验器(requiredstring)”和“字符串长度校验器(stringlength)”为表单的输入进行校验,采用风格一。

struts2数据验证

struts2数据验证

struts2的核心是从webwork演变来的,其数据验证框架其实就是原webwork的那一套东西。

一,Struts2数据验证的整体框架介绍struts2的action都要继承ActionSupprot类,这个类实现了Validateable 与ValidationAware这两个跟数据验证有关的接口。

其中Validateable只有一个方法validate()用于数据验证;ValidationAware则用于记录验证出错时的相关信息。

而数据验证在什么时候被调用呢?数据验证的调用是包装在workflow拦截器里,我们看看workflow拦截器在struts_default.xml中的定义,它是放在默认的defaultStack拦截器组里,相关顺序如下:<interceptor-ref name="params"/><interceptor-ref name="conversionError"/><interceptor-ref name="validation"/><interceptor-ref name="workflow"/>params与conversionError这两个拦截器在workflow的前面,它们的工作是从request中把数据转成正确的Java类型数据,以供后面处理。

validation 拦截器实质是AnnotationValidationInterceptor与我们这里谈的数据验证不是一回事,它只判断有没有@SkipValidation注解,如果有就不会路过数据验证,只是起一个开关作用。

当workflow拦截器触发时,它先检查当前请求的action是否实现了Validateable接口,如果实现了该接口,则调用validate()方法:如果这个方法处理时发现有数据验证不通过,则会生成一个错误信息并交给ValidationAware的方法去存储这些出错信息。

struts2中方法验证的三种形式

struts2中方法验证的三种形式
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">*</param>
如果有多个方法,方法名以“,”隔开,例如要验证add和delete方法:
<param name="validation.includeMethods">add,delete</param>
1,采用注解annotation形式:在不需要验证的方法前加上@SkipValidation
2,针对每一个需要验证的方法单独生成一个配置文件,例如在UserAction中有两个方法add()和delete()
并且我们假设只对add()方法进行校验,配置如下:
-------------------------------struts.xml----------------------------------------------
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
<!-- 配置这个action主要是为了让其他的请求能进入其他的方法 -->
<action name="user_*" class="erAction" method="{1}">

Struts2的s:date标签使用详解[转]

Struts2的s:date标签使用详解[转]

Struts2的s:date标签使⽤详解[转]作⽤:⽤来格式化显⽰⽇期的格式。

它可以⽤⼀种你指定的格式来显⽰(如:“yyyy-MM-dd”),可以⽣成通俗易懂的注释(如:in 2 hours,14 minutes),或者⽤预先定义的⼀个格式来显⽰(如在properties配置⽂件中配置'struts.date.format').如果没有找到这个struts.date.format,则会找默认的DateFormat.MEDIUM来格式化你的⽇期对象。

当然如果在值栈中没有找你对应的⽇期对象,则会返回空格。

可配置的标签属性有:· name· nice· format下⾯这些功能的使⽤决定于nice属性与format属性。

1、nice属性为truei18n key defaultstruts.date.format.past{0} agostruts.date.format.future in {0}struts.date.format.seconds an instantstruts.date.format.minutes{0,choice,1#one minute|1<{0} minutes}struts.date.format.hours {0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1<, {1} minutes}struts.date.format.days {0,choice,1#one day|1<{0} days} {1,choice,0#|1#, one hour|1<, {1} hours}struts.date.format.years {0,choice,1#one year|1<{0} years} {1,choice,0#|1#, one day|1<, {1} days}2、nice属性为 false,format属性指定的格式如:dd/MM/yyyy在这种情况下,format属性将被使⽤。

Struts2 数据输入校验(2) —— XML验证

Struts2 数据输入校验(2) —— XML验证

Struts2 数据输入校验(2) —— XML验证struts2提供了通过XML方式对输入数据进行验证的校验框架。

在与XXXAction同级的目录下,建立XXXAction-validation.xml,即为该Action的校验逻辑。

该校验XML的dtd格式文件为/xwork/xwork-validator-1.0.2.dtd,具体内容可以展开下面的代码:/xwork/xwork-validator-1.0.2.dtd可以看到,数据校验XML的根元素<validator>下面可以包含两种子元素:field和validator1、前者field 是针对字段进行的校验;2、后者validator 是非字段或者说全局范围的校验。

在介绍完校验是怎么回事后,后面会简单比较一下两种校验方式的区别。

一、字段校验:(field)先看个基本示例<validators><field name="username"><field-validator type="requiredstring"><message key="ername.required"/></field-validator></field><field name="password"><field-validator type="stringlength"><param name="trim">true</param><param name="minLength">4</param><param name="maxLength">10</param><message>password should be ${minLength} to ${maxLength} characters lon g.</message></field-validator></field></validators>有几个地方需要注意一下的。

struts2注解方式的验证

struts2注解方式的验证

struts2注解⽅式的验证struts2的验证分为分编程式验证、声明式验证、注解式验证。

因现在的⼈越来越懒,都追求零配置,所以本⽂介绍下注解式验证。

⼀.hello world参考javaeye的这篇⽂章,按着做⼀次,起码有个初步印象Validation使⽤名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使⽤Validation了如果是使⽤默认的拦截器,就已经开启了验证框架的了,直接⽤。

开启验证的⽅式是(官⽹):打开验证默认拦截器堆栈“defaultStack”已经打开验证。

在创建⾃⼰的拦截器堆栈⼀定要包括两对validation和workflow拦截器。

来⾃struts-default.xml:<interceptor-stack name="defaultStack">...<interceptor-ref name="validation"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref><interceptor-ref name="workflow"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref></interceptor-stack>从版本2.0.4开始,Struts为XWork的com.opensymphony.xwork2.validator.ValidationInterceptor拦截器提供了扩展。

struts2常用标签详解

struts2常用标签详解

struts2标签详解A:<s:a xhref=""></s:a>-----超链接,类似于html里的<a></a><s:action name=""></s:action>-----执行一个view里面的一个action<s:actionerror/>-----如果action的errors有值那么显示出来<s:actionmessage/>-----如果action的message有值那么显示出来<s:append></s:append>-----添加一个值到list,类似于list.add();<s:autocompleter></s:autocompleter>-----自动完成<s:combobox>标签的内容,这个是ajaxB:<s:bean name=""></s:bean>-----类似于struts1.x中的,JavaBean的值C:<s:checkbox></s:checkbox>-----复选框<s:checkboxlist list=""></s:checkboxlist>-----多选框<s:combobox list=""></s:combobox>-----下拉框<s:component></s:component>-----图像符号D:<s:date/>-----获取日期格式<s:datetimepicker></s:datetimepicker>-----日期输入框<s:debug></s:debug>-----显示错误信息<s:div></s:div>-----表示一个块,类似于html的<div></div><s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----双下拉框E:<s:if test="#name=‟hujianqiang‟">asdfasdf</s:if><s:elseif test=""></s:elseif><s:else></s:else>-----这3个标签一起使用,表示条件判断F:<s:fielderror></s:fielderror>-----显示文件错误信息<s:file></s:file>-----文件上传<s:form action=""></s:form>-----获取相应form的值G:<s:generator separator="" val=""></s:generator>----和<s:iterator>标签一起使用H:<s:head/>-----在<head></head>里使用,表示头文件结束<s:hidden></s:hidden>-----隐藏值I:<s:i18n name=""></s:i18n>-----加载资源包到值堆栈<s:include value=""></s:include>-----包含一个输出,servlet或jsp页面<s:inputtransferselect list=""></s:inputtransferselect>-----获取form的一个输入<s:iterator></s:iterator>-----用于遍历集合L:<s:label></s:label>-----只读的标签M:<s:merge></s:merge>-----合并遍历集合出来的值O:<s:optgroup></s:optgroup>-----获取标签组<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----左右选择框P:<s:param></s:param>-----为其他标签提供参数<s:password></s:password>-----密码输入框<s:property/>-----得到'value'的属性<s:push value=""></s:push>-----value的值push到栈中,从而使property标签的能够获取value的属性R:<s:radio list=""></s:radio>-----单选按钮<s:reset></s:reset>-----重置按钮S:<s:select list=""></s:select>-----单选框<s:set name=""></s:set>-----赋予变量一个特定范围内的值<s:sort comparator=""></s:sort>-----通过属性给list分类<s:submit></s:submit>-----提交按钮<s:subset></s:subset>-----为遍历集合输出子集T:<s:tabbedPanel id=""></s:tabbedPanel>-----表格框<s:table></s:table>-----表格<s:text name=""></s:text>-----I18n文本信息<s:textarea></s:textarea>-----文本域输入框<s:textfield></s:textfield>-----文本输入框<s:token></s:token>-----拦截器<s:tree></s:tree>-----树<s:treenode label=""></s:treenode>-----树的结构U:<s:updownselect list=""></s:updownselect>-----多选择框<s:url></s:url>-----创建urlStruts2常用的Ajax标签Struts2为了简化Ajax过程,提供了一些常用的Ajax标签,对于一些更复杂的Ajax通信过程,我们可以使用JSON插件来实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最常用的三种类型验证
Struts2 配置就不说了,xml命名可以是action类名称-action名称-validation.xml 这样的命名方法可以当当每次访问这个action名称的时候才验证。

看代码。

<validators>
<field name="id">
<field-validator type="requiredstring" short-circuit="true"> <message>id不能为空!</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>id必须在${minLength}-${maxLength}之间</message> </field-validator>
</field>
<field name="time">
<field-validator type="required" short-circuit="true">
<message>time不能为空!</message>
</field-validator>
<field-validator type="date">
<param name="min">2001-01-01</param>
<param name="max">2005-12-31</param>
<message>时间必须在${min}-${max}之间</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required" short-circuit="true">
<message>age不能为空!</message>
</field-validator>
<field-validator type="int">
<param name="min">13</param>
<param name="max">19</param>
<message>${min}-19</message>
</field-validator>
</field>
</validators>
基本都看的懂,重点是:
验证时间和数字非空的时候,与字符串有所不同,
1.字符串类型使用requiredstring ,
2.但是时间和数字验证非空的时候,必须使用 required
然后short-circuit="true" 的意思是,验证完是否非空,如果不通过该验证的话(也就是为空),就不执行下面的长度验证。

相关文档
最新文档