一、用户输入验证
1、编程方式:
动作类中的所有方法进行验证:
步骤:
a、动作类继承ActionSupport
b、覆盖调用public void validate()方法
c、在validate方法中,编写不符合要求的代码判断,并调用父类的addFieldError(String fieldName,String errorMessage)
如果fieldError(存放错误信息的Map)有任何的元素,就是验证不通过,动作方法不会执行。
Struts2框架会返回到name=input的result
d、在name=input指定的页面上使用struts2的标签显示错误信息。<s:fielderror/> 或 ${errors.名字}
动作类中指定的方法进行验证:
编写步骤与上面相同
验证方法书写有要求:
public void validateXxx() Xxx代表的是要验证的动作方法名,其中要把动作方法名的首字母变为大写。
2、基于XML配置文件的方式:
动作类中的所有方法进行验证:
在动作类的包中,建立一个名称为:动作简单类名-validation.xml ,比如要验证的动作类名是UserAction UserAction-validation.xml
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"><!--dtd在xwork包下-->
<validators>
<field name="username"><!--jsp中可以通过${errors.username}或<s:fielderror></s:fielderror>输出错误信息-->
<!-- 内置验证器都是定义好的,在xwork-core.jar com.opensymphony.xwork2.validator.validators包中的default.xml文件中 -->
<field-validator type="requiredstring"><!-- 不能为null或者""字符串,默认会去掉前后的空格 -->
<message>用户名不能为空</message>
</field-validator>
</field>
</validators>
动作类中指定的方法进行验证:
配置文件的名称书写有一定要求。
动作类名-动作名(配置文件中的动作名)-validation.xml
UserAction-user_add-validation.xml
struts2提供的校验器列表
系统提供的校验器如下:
required (必填校验器,要求field的值不能为null)
requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
stringlength(字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
email(邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址)
url(网址校验器,要求如果field的值非空,则必须是合法的url地址)
date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
conversion(转换校验器,指定在类型转换失败时,提示的错误信息)
visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性)
expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)
2. 校验器的使用例子
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>
email:邮件地址校验器
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>邮箱不能为空</message>
</field-validator>
<field-validator type="email">
<message>邮件格式不正确</message>
</field-validator>
regex:正则表达式校验器
<field-validator type="regex">
<param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
<message>手机号格式不正确!</message>
</field-validator>
int:整数校验器
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>年龄必须在1-150之间</message>
</field-validator>
字段OGNL表达式校验器
<field name="imagefile">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[imagefile.length() <= 0]]></param>
<message>文件不能为空</message>
</field-validator>
</field>
3、自定义基于XML的验证器
a、编写一个类,继承FieldValidatorSupport类。
b、在public void validate(Object object)编写你的验证逻辑
不符合要求的就向fieldErrors中放消息
c、一定注册你的验证器才能使用
在WEB-INF/classes目录下建立一个名称为validators.xml的配置文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 注册自定义的验证器 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="strongpassword" class="cn.itcast.validators.StrongPasswordValidator"/>
</validators>
d、日后就可以像使用Struts2提供的16个验证器方式去使用了。
二、Struts2对于i18n的支持
全局资源文件/包范围资源文件/动作类的资源文件
全局资源文件:放到WEB-INF/classes目录下
包范围资源文件:服务于Java类中的包下的动作类的。
取名:package_语言_国家.properties
动作类的资源文件:放到与动作类相同的包中
取名:动作类名_语言_国家.properties
jsp中如何读取国际化的消息
动作类中如何读取国际化的消息
三、OGNL表达式:
OGNL是从ActionContext中获取数据的。
ActionContext的结构:
ValueStack:
List:动作类放在此处。取存放在ValueStack中的root的对象的属性,直接写即可
访问以下内容中的对象要使用#+(范围)session
application:ServletContext中的那个Map
session:HttpSession中的那个Map
request:ServletRequest中的那个Map
parameters:请求参数的那个Map。(如同EL表达式的paramValues内置对象)
attr:相当于PageContext的findAttribute方法。${username}
小技巧:在页面中使用<s:debug/>查看上下文中的对象
一)OGNL简介
(1)回顾EL的作用
A)能获取域对象(page/request/session/application)中的数据,例如:${sessionScope.username}
B)运算和判断,例如:${10 * 10},${!empty sessionScope.username?sessionScope.username:'游客'}
C)EL函数,例如:${fn:toUpper('www.itcast.cn')}
(2)OGNL的作用(对象图导航语言,struts2专用的标记语言,比EL更强大)
A)获取ActionContext中的数据
B)集合操作,即访问list,map
(3)理解ActionContext对象
A)ActionContext对象是struts2的数据中心,在一次符合/*模式的请求到来时,框架负责创建,放置在request域
对象中。
B)ActionContext对象可以分为如下几个子对象。
参见<<ActionContext对象的六个子对象.JPG>>
C)ActionContext有一个非常重要和特殊的对象,叫值栈,它是Action的数据中心,在一次符合/*模式的请求到来时,
框架负责创建,放置在request域对象中。
D)值栈分为二个部分:
》对象栈(List集合)
Action的实例
Action的属性
》Map栈(Map集合)
通过ValueStack的API操作的对象
page->request->ValueStack->session->application->
如果都找不到,返回空白字符串
如果找到了,不会再继续查找
在struts2中,不提倡使用request来存内容,而使用ValueStack来替换requset对象
//演示向ActionContext对象中六个子对象存数据
public class BaseAction extends ActionSupport{
public String execute() throws Exception {
//获取struts2的数据中心
ActionContext actionContext = ActionContext.getContext();
/*向request中存入数据
ServletActionContext
.getRequest()
.setAttribute("username","requestMap");
*/
//向sessionMap中存入数据
//actionContext.getSession().put("username","sessionMap");
//向applicationMap中存入数据
//actionContext.getApplication().put("username","applicationMap");
//向ValueStack中存入数据
//actionContext.getValueStack().set("username","ValueStack");
return this.SUCCESS;
}
}
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<%
//pageContext.setAttribute("username","page");
%>
获取ActionContext对象中六个子对象的数据<br/>
requestMap:<s:property value="#request.username"/><br/>
sessionMap:<s:property value="#session.username"/><br/>
applicationMap:<s:property value="#application.username"/><br/>
ValueStack:<s:property value="username"/><br/>
parameters:<s:property value="#parameters.username"/><br/>
<b>attr:<s:property value="#attr.username"/></b>
</body>
</html>
二)OGNL的4种符号用法
*(1)#
>>访问ActionContext对象
>>访问集合Map:#{'male':'[男]','female':'[女]'}
>>访问集合List
A)集合的投影:userList.{username,JavaBean的某个属性值}
B)集合的过滤:userList.{?#this.age>22}
userList.{^#this.age>22}
userList.{$#this.age>22}.{?#this.gender=="男"}
?#表示所有对象
^#表示第一个对象
$#表示最后一个对象
this表示当前迭代的这个对象
C)集合的投影和过滤:userList.{?#this.age>22}[0]
[0]表示符合条件的第一个对象
[1]表示符合条件的第二个对象
什么情况下使用#:
A)非值栈
B)获取JavaBean属性值
(2)%{}:
>><s:textfield label="%{usernameTIP变量}" name="username"/>
>><s:textfield label="%{'usernameTIP'常量}" name="username"/>
(3)${}不是EL:
>><field-validator type="double">
<param name="minInclusive">4000</param>
<param name=" maxInclusive">6000</param>
<message>薪水必须介于${minInclusive}到${maxInclusive}之间</message>
</field-validator>
${}可以访问xml本身的数据
>><param name="contentDisposition">attachment;filename=${filename}</param>
${}也可以访问Action实例变量,前提Action一定要对该实例变量提供getXxx()方法
(4)访问集合List或{}
>>value='{"AA","BB","CC","DD"}'
>><s:property value="stringList.isEmpty"/>
>><s:property value="stringList.size"/>
在迭代List或数组时,#可要可不要
三)struts2常用标签介绍
1)标签(M) :为了显示出某种特殊的效果,struts2对普通进封装后产生的对象,叫标签。
struts2标签底层,都是处理类,例如:<s:textfield/>
2)模板(N) :将所有风格显示相类型的标签,形成一个集合,该集合就叫做模板。
1个模板对应N个标签
3)主题(1) :将N个模板所表现出来的内容,形成一个集合,该集合就叫做主题。
1个主题对应N个模板
4)struts2的四类主题
A)simple主题:checkbox,无<table>,灵活
B)xhtml主题:checkbox(struts2默认主题)有<table>
C)css_xhtml主题:checkbox,无<table>,用div替换<table>
D)ajax主题:checkbox
5)修改主题的三种方式
A)在某个表单标签中修改,例如:<s:textfield label="用户名" name="username" theme="simple"/>
B)在<s:form>标签中使用theme,争对整个表单中的所有表单项元素<s:form theme="simple"/>
C)在struts.property文件中,覆盖系统的整体风格,struts.ui.theme=simple
当A,B,C同时作用某一个表单标签时,A起决定作用
6)标签的四种作用
A)[布局]
B)表单项数据回显
C)错误信息显示
D)国际化
7)常用标签
*>>s:fielderror
*>>s:property
*>>s:text
*>>s:form
*>>s:textfield
*>>s:password
*>>s:submit
*>>s:reset
*>>s:hidden
*>>s:textarea
当需要将jquery加入进来时,需要注意二点:
A)引用jquery的路径,使用绝对路径,例如:/day34/js/jquery-1.8.2.min.js
B)定位某个标签时,不能使用struts2标签,只能使用普标签
*>>s:radio【listValue页面中显示的值,listKey页面中隐藏的值】
*>>s:select
*>>s:checkboxlist
*>>s:property
>>s:bean
>>s:param
>>s:url
>>s:set
>>s:include
>>s:date
*>>s:if-s:elseif-s:else
*>>s:iterator
>>s:sort【实现Comparator接口】
相关推荐
本文详细介绍了PHP的基本语法、变量类型、运算符号以及文件上传和发邮件功能的实现方法,适合初学者了解和掌握PHP的基础知识。
公司金融整理的word文档
Prometheus Python客户端Prometheus的官方 Python 客户端。安装pip install prometheus-client这个包可以在PyPI上找到。文档文档可在https://prometheus.github.io/client_python上找到。链接发布发布页面显示项目的历史记录并充当变更日志。吡啶甲酸
DFC力控系统维护及使用
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
2019-2023GESP,CSP,NOIP真题.zip
博文链接 https://blog.csdn.net/weixin_47560078/article/details/127712877?spm=1001.2014.3001.5502
包含: 1、jasminum茉莉花 2、zotero-style 3、greenfrog 4、zotero-reference 5、translate-for-zotero 用法参考:https://zhuanlan.zhihu.com/p/674602898
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
python技巧学习.zip
2023 年“泰迪杯”数据分析技能赛 A 题 档案数字化加工流程数据分析 完整代码
echarts 折线图数据源文件
Visual Studio Code 的 Python 扩展Visual Studio Code 扩展对Python 语言提供了丰富的支持(针对所有积极支持的 Python 版本),为扩展提供了访问点,以无缝集成并提供对 IntelliSense(Pylance)、调试(Python 调试器)、格式化、linting、代码导航、重构、变量资源管理器、测试资源管理器等的支持!支持vscode.devPython 扩展在vscode.dev (包括github.dev )上运行时确实提供了一些支持。这包括编辑器中打开文件的部分 IntelliSense。已安装的扩展Python 扩展将默认自动安装以下扩展,以在 VS Code 中提供最佳的 Python 开发体验Pylance - 提供高性能 Python 语言支持Python 调试器- 使用 debugpy 提供无缝调试体验这些扩展是可选依赖项,这意味着如果无法安装,Python 扩展仍将保持完全功能。可以禁用或卸载这些扩展中的任何一个或全部,但会牺牲一些功能。通过市场安装的扩展受市场使用条款的约束。可
Centos6.x通过RPM包升级OpenSSH9.7最新版 升级有风险,前务必做好快照,以免升级后出现异常影响业务
5 总体设计.pptx
Python 版 RPAv1.50 • 使用案例• API 参考 • 关于 和制作人员 • 试用云 • PyCon 视频 • Telegram 聊天 • 中文 • हिन्दी • 西班牙语 • 法语 • বাংলা • Русский • 葡萄牙语 • 印尼语 • 德语 • 更多..要为 RPA(机器人流程自动化)安装此 Python 包 -pip install rpa要在 Jupyter 笔记本、Python 脚本或交互式 shell 中使用它 -import rpa as r有关操作系统和可选可视化自动化模式的说明 -️ Windows -如果视觉自动化有故障,请尝试将显示缩放级别设置为推荐的 % 或 100% macOS -由于安全性更加严格,请手动安装 PHP并查看PhantomJS和Java 弹出窗口的解决方案 Linux -视觉自动化模式需要在 Linux 上进行特殊设置,请参阅如何安装 OpenCV 和 Tesseract Raspberry Pi - 使用此设置指南在 Raspberry Pies(低成本自
原生js识别手机端或电脑端访问代码.zip
浏览器
内容概要:本文介绍了基于Spring Boot和Vue开发的旅游可视化系统的设计与实现。该系统集成了用户管理、景点信息、路线规划、酒店预订等功能,通过智能算法根据用户偏好推荐景点和路线,提供旅游攻略和管理员后台,支持B/S架构,使用Java语言和MySQL数据库,提高了系统的扩展性和维护性。 适合人群:具有一定编程基础的技术人员,特别是熟悉Spring Boot和Vue框架的研发人员。 使用场景及目标:适用于旅游行业,为企业提供一个高效的旅游推荐平台,帮助用户快速找到合适的旅游信息和推荐路线,提升用户旅游体验。系统的智能化设计能够满足用户多样化的需求,提高旅游企业的客户满意度和市场竞争力。 其他说明:系统采用现代化的前后端分离架构,具备良好的可扩展性和维护性,适合在旅游行业中推广应用。开发过程中需要注意系统的安全性、稳定性和用户体验。