struts2-18基于XML配置方式实现对action的所有方法或指定方法进行输入校验

StrutsStruts2简介及实现用户登录代码示例 Struts2是由传统的Struts1WebWork两个经典的MVC框架发展起来的,无论是从Struts2设计的角度来看,还是从Struts2在实际项目中的易用性来看,Struts2都堪称是一个非常优秀的MVC框架。 与传统的Struts1相比,Struts2允许使用普通的、传统的Java对象作为ActionAction的execute()方法不再与Servlet API耦合,因而更易于测试 阅读详情

基于XML配置方法实现对action所有方法的输入验证:

使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation.xml为固定写法。如果Action类为cn.gz.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"> 
<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空!</message>
        </field-validator>
    </field>
</validators>

指定action中要校验的属性,指定校验器,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分校验需要的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。为校验失败后的提示信息。如果需要国际化的话,可以为message指定key属性,key的值为资源文件中的key。在这个校验文件中,对action中字符串类型的username属性进行校验,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。

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时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中。

校验器的使用例子:
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">8</param>
    <param name = "minLength">2</param>
    <param name = "trim">true</param>
    <message><![CDATA[长度应在2-8个字符长度之间]]></message>
</field-validator>

email邮件校验器:

<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>

编写校验文件,不能出现帮助信息时:

在编写ActionClassName-validator.xml校验文件时,如果出现不了帮助信息,可以按一下方法解决:
Windows-》preferences-〉myeclipse-》files and editors-〉XML-》XMLcatalog点“add”,在出现的窗口中的location中选“File system”,然后在xwork-2.1.2.jar解压的目录的src\java目录中选择xwork-validator-1.0.3.dtd,回到设置窗口时不要急着关闭窗口,应把窗口中的key Type改为URI。key改为:http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd

例子:
struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>     
     <package name="person" namespace="/person" extends="struts-default">
            <action name="manage_*" class="cn.gz.action.PersonAction" method="{1}">
                <result name="input">/index.jsp</result>
                <result name="message">/WEB-INF/page/message.jsp</result>
            </action>
     </package>
</struts>

PersonAction-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"> 
<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空!</message>
        </field-validator>
    </field>
    <field name="mobile">
        <field-validator type="requiredstring">
            <message>手机号不能为空!</message>
        </field-validator>
        <field-validator type="regex">
             <param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
             <message>手机号格式不正确!</message>
        </field-validator>
    </field>
</validators>

PersonAction.java:

package cn.gz.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class PersonAction extends ActionSupport{
    private String username;
    private String mobile;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String update(){
        ActionContext.getContext().put("message", "更新成功");
        return "message";
    }

    public String save(){
        ActionContext.getContext().put("message", "保存成功");
        return "message";
    }   
}

index.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>输入校验</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0"> 
  </head>

  <body>
   <s:fielderror/>
   <form action="${pageContext.request.contextPath}/person/manage_update.action" method="post">
        用户名:<input type="text" name="username"/>不能为空<br/>
        手机号:<input type="text" name="mobile"/>不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br/>
        <input type="submit" value="提 交"/></form>
  </body>
</html>

message.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>结果</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0"> 
  </head>

  <body>
    ${message }
  </body>
</html>

基于XML配置方式实现对action的指定方法进行输入校验

当检验文件取名为ActionClassName-validation.xml时,是对所有方法进行输入校验。如果只是对action中的某个方法进行输入校验的话,则校验文件应该取名为ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml文件中Action的名称。例如:在实际中,常有以下的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>     
     <package name="person" namespace="/person" extends="struts-default">
            <action name="manage_*" class="cn.gz.action.PersonAction" method="{1}">
                <result name="input">/index.jsp</result>
                <result name="message">/WEB-INF/page/message.jsp</result>
            </action>
     </package>
</struts>

PersonAction中有两个方法:

public String add() throws Exception{
    ......
}
public String update() throws Exception{
    ......
}

要对add()方法进行校验,则校验文件应取名为:PersonAction-manage_add-validation.xml
要对update()方法进行验证,则校验文件应取名为:PersonAction-manage_update-validation.xml

基于XML校验的一些特点:

当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按照下面的顺序寻找校验文件:
1、ActionClassName-validation.xml
2、ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时,会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用与action方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。

当action继承了另一个action,父类action的校验文件会先被搜索到。

假设UserAction继承BaseAction:

<action name = "user" class = "cn.gz.action.UserAction" method = "{1}">
</action>

访问上面的action,系统先搜索父类的校验文件:BaseAction-validation.xml,BaseAction-user-validation.xml ,接着搜索子类的校验文件:UserAction-validation.xml,UserAction-user-validation.xml.应用于上面action的校验规则为这四个文件的总和。

例子:
struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>     
     <package name="person" namespace="/person" extends="struts-default">
            <action name="manage_*" class="cn.gz.action.PersonAction" method="{1}">
                <result name="input">/index.jsp</result>
                <result name="message">/WEB-INF/page/message.jsp</result>
            </action>
     </package>
</struts>

PersonAction-manage_update-validation.xml:[与PersonAction在同一个包下]

<?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"> 
<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空!</message>
        </field-validator>
    </field>
    <field name="mobile">
        <field-validator type="requiredstring">
            <message>手机号不能为空!</message>
        </field-validator>
        <field-validator type="regex">
             <param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
             <message>手机号格式不正确!</message>
        </field-validator>
    </field>
</validators>

PersonAction:

package cn.gz.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class PersonAction extends ActionSupport{
    private String username;
    private String mobile;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String update(){
        ActionContext.getContext().put("message", "更新成功");
        return "message";
    }

    public String save(){
        ActionContext.getContext().put("message", "保存成功");
        return "message";
    }   
}

index.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>输入校验</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0"> 
  </head>

  <body>
   <s:fielderror/>
   <form action="${pageContext.request.contextPath}/person/manage_save.action" method="post">
        用户名:<input type="text" name="username"/>不能为空<br/>
        手机号:<input type="text" name="mobile"/>不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字<br/>
        <input type="submit" value="提 交"/></form>
  </body>
</html>

message.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>结果</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0"> 
  </head>

  <body>
    ${message }
  </body>
</html>
投稿前利用GPT-5.5给论文做一次深度校对,投稿命中率翻倍! 3)一致性:请对比摘要的结论与正文(如果我也提供了正文),确保完全一致。请严格检查结果部分,确保客观性:1)纯粹性检查:标出所有包含“为什么”(解释)“这意味着什么”(暗示)的主观语句,这些应移至讨论部分。请你帮我评估讨论部分的深度:1)解释与对比:检查每一项主要结果是否都解释了原因,并引用了前人研究进行对比(一致相悖)。我见过太多人把校对理解为检查错别字了,实际上,校对要看的远不止这个,像逻辑是否连贯、术语是否前后一致、图表有没有被正确引用等等的这些细节,往往决定了文章是秒被拒,还是能顺利进入外审。 阅读详情

相关推荐

军品研制过程-转阶段

介绍军品转阶段评审

Abel的博客 2万+

struts2学习(2实现验证方式

第一种 Struts2中提供了一个com.opensymphony.xwork2.Validateable接口,此接口只有一个方法:validate()。如果有某个类实现了Validatable接口,Struts2就可以直接调用该类中的validate()方法。ActonSupport类实现Validateable接口。本文讨论此验证格式。 本文演示了一个模拟简单登录的场景:用户打开一

蓝星花 1050

掌握Struts2数据校验与国际化实现

国际化(Internationalization),通常被缩写为i18n(因为in之间有18个字母),是软件设计时对不同区域支持的处理过程,它包括语言、货币、日期、时间格式等多种文化信息的处理。而本地化(Localization),通常缩写为l10n(因为ln之间有10个字母),是在国际化基础上针对特定地区语言的定制化过程,包括翻译文本、适应本地习惯等。国际化确保软件可以适应不同的语言环境而不需修改源代码,而本地化则使得软件能够在特定地区正常运行并提供良好的用户体验。

weixin_30661119的博客 668

个人博客-2(用户信息修改)

用户信息修改 修改登录名昵称 先从session中获取已登录用户的登录名昵称显示在输入框中 用户可以根据原信息进行修改 使用ajax异步交互 profile.html <form role="form" id="userNameForm"> <div class="form-group col-sm-8"> <div class="alert alert-danger" id="updateUserName-info" style="

qq_42265394的博客 851

Struts 2基于XML配置方式指定action方法实现输入校验

校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xmlaction的名称。例如:在实际应用中,常有以下配置...

侯上校 229

Struts2:对Action方法进行输入校验

struts2中,我们可以实现action的所有方法进行校验action指定方法进行校验。对于输入校验struts2提供了两种实现方法: 1.采用手工编写代码实现 2.基于XML配置方式实现**1.采用手工编写代码实现

静墨的博客 4627

Struts2基于XML配置方式实现Action方法进行校验

使用XMLAction方法进行校验方式有两种,一种是对Action的所有方法进行校验,另一种是对Action指定方法进行校验.Action的所有方法进行校验: 步骤: 1.创建Action需要继承ActionSupport 2.提供校验xml文件,该文件action放在同一个包下 校验文件的取名格式为:PersonAction-validation.xml,其中PersonAc...

jandroid 194

struts2action的多个方法进行校验

新手刚学struts2,对struts2action的多个方法进行校验问题有点头疼,现在算是解决了,下面分享一下: 在action中可能有多个处理业务的方法,我们可能要对多个不用的方法进行不同的验证,下面是通过校验框架(有效的XML文件)对action中多个方法进行验证

925

Struts2输入校验

在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验:    客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人。    服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担。 所以一般在我们开发中,是客户端服务器端校验

m0_37630565的博客 426

Struts2_基于XML配置方式指定action方法实现输入校验、基于XML校验的一些特点

基于XML配置方式指定action方法实现输入校验: 当校验文件的取名为ActionClassName-validation.xml时,会对action中的所有处理方法实现输入验证。 如果你只需要对action中的某个action方法实现校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml, 其中ActionName为stru

辐_射的博客 453

Struts2_基于XML配置方式实现action的所有方法进行校验

基于XML配置方式实现action的所有方法进行校验: 使用基于XML配置方江苏实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件 action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName 为action的简单类名,-validation为固定写法。如果Ac

辐_射的博客 354

struts入门之输入校验

 输入校验有两种方式:分别使用全局校验文件局部校验文件【以PiontAction类为例】 一、全局校验文件实现: 1、首先在struts.xml文件中加入:message"/>  【备注:该message名任意取值】//constant常量含义:是struts2整个框架中要使用的哪些常量,这些常量将替换掉struts中的默认值!在不使用这些的情况下,如果出现类型转换

快乐天使专栏 885

Struts2学习第一天——struts2基本流程与配置

struts2框架 struts2快速入门 Struts2 处理流程 模仿struts2流程完成入门程序 struts2的流程分析以及工具配置 struts2配置(重点) 1.struts2配置文件加载顺序 2.关于Action配置 关于常量配置 Action 关于Action类的创建方式介绍 关于action的访问方式struts2框架中获取servlet API Result结果类型

lutianfei的专栏 3万+

Struts2校验

struts2校验有两种实现方法: 手工编写代码实现(基本验证) //login.jsp <font color="red"><s:fielderror/></font> <s:form action="login"> <s:textfield name="uname" label="...

dianruanbin6930的博客 111

基于XML配置方式实现action的所有方法指定方法进行输入校验

基于XML配置方式实现action的所有方法指定方法进行输入校验 使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件校验文件action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation为固定写法。如果

fengdongkun的专栏 2558

struts2基于XML配置方式指定action方法进行校验

xml文件命名方法规则 ActionClassName-actionName-validation.xml 如: PersonAction-manage_update-validation.xml 注意,actionName是指请求路径下的actionName 注意,此xml文件要放在ActionClassName一样的包底下。 如果提供了全局的校验,又提供了上述校验,会先搜索全局的

Crazy Android 956

struts2action指定方法进行校验

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33754913的博客 179

struts2在学习(十)--表单验证的两种方式

1. Struts2中的输入校验2. 编码方式校验  1) Action一定要继承自ActionSupport  2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.  3) 也可针对所有的请求处理方法编写public void validate()方法。  4) 在校验方法中,可以通过addFieldError()方...

开发笔记 382

Vue 插件 vee-validate校验插件详解大全

vee-validate 校验插件详解

半夏_2021的博客 1万+

基于XML配置方式指定action方法实现输入校验2

   当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xmlaction的名称。例如:在实际应用中,常有以...

小强博客 185

Wwise-Unpacker:解压缩游戏音频Wwise文件(pck,bnk)

Wwise开箱器解压缩游戏音频Wwise文件(pck,bnk) 本指南仅适用于Windows-64bit! 我将以《奇异人生》为例。 这是存档结构: Wwise开箱器MP3(未包装的MP3) OGG(未包装的OGG) 游戏文件(PCKBNK文件) 工具(用于拆包过程的工具) 解压到MP3.bat 解压到OGG.bat 现在,我们必须找到要解压缩的音频文件。 Life is Strange使用Wwise音频,因此文件打包在.PCK.BNK容器中。 您可以只搜索* .PCK* .BNK,但我更喜欢以下方法:转到游戏文件夹(C:/ Program Files(x86)/ Steam / steamapps / common / Life Is Strange)并搜索“ WwiseAudio”它将显示每个章节的音频文件夹。 在每个文件夹中,您会发现以下类型的文件,这些

上一篇: struts2-17输入校验的流程
下一篇: struts2-19配置国际化全局资源文件、输出国际化信息
39660593
博客等级 码龄9年 8粉丝 30原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值