struts2中两种validation.xml的配置方式_百度文库

在struts中,根据配置的validation.xml文件进行页面输入项目的验证已经众所周知,本文介绍在struts2中两种validation.xml的配置方式。可以根据不同的需要进行不同的配置。

以下以login页面输入firstname,lastname,和age为例进行说明。
struts.xml中,成功的话转向成功页面。不成功的话转回到原页面。

首先建立userbean文件。
文件名:UserBean.java
包:struts2.login.bean
文件内容:
package struts2.login.bean;

public class UserBean {
    private String firstname;
    private String lastname;
    private Integer age;
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Integer getAge() {
        return age;
    }
}

然后建立login的action文件
文件名:LoginAction.java
包:struts2.login
文件内容:
package struts2.login;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import struts2.login.bean.UserBean;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class LoginAction  extends ActionSupport{
    private  UserBean userBean;
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }

public UserBean getUserBean() {
        return userBean;
    }

public void setUserBean(UserBean userBean) {
        this.userBean = userBean;
    }

@Override
    public void validate() {
        // TODO Auto-generated method stub
        Map map = this.getFieldErrors();
        Set set = map.keySet();

for (Iterator iter = set.iterator(); iter.hasNext();)
        {
            System.out.println(map.get(iter.next()));
        }
    }
 
}
对于这个文件,有两点请注意:
1,action文件和bean文件没有放在相同的包下,这是为了说明第二种xml配置的文件路径所用。
2,action文件中的validate方法只是起到一个debug错误message的作用,可去掉。

然后建立login.jsp文件,
文件位置:网站/work的目录下
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<s:form action="login" method="post">
<s:textfield name="userBean.firstname" label="firstname"/>
<s:textfield name="userBean.lastname" label="lastname"/>
<s:textfield name="userBean.age" label="age"/>
<s:submit/>
</s:form>
</html>

success.jsp文件
文件位置:网站/work的目录下
文件内容:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
LOGIN SUCCESS
</html>

然后是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="default" extends="struts-default">
        <action name="login" class="struts2.login.LoginAction">
            <result name="success">/work/success.jsp</result>
            <result name="input">/work/login.jsp</result>
        </action>
    </package>
    
</struts>

好准备工作全部完了
下面是配置validation.xml文件的时候了

1,第一种方法,在action文件所在的目录下面,建立一个“action名-validation.xml”这样命名的文件

文件名:LoginAction-validation.xml
文件位置:和action文件同目录
文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

<field name="userBean.firstname">
        <field-validator type="requiredstring">
            <message>request firstname</message>
        </field-validator>
    </field>
    
    <field name="userBean.lastname">
        <field-validator type="requiredstring">
            <message>request lastname</message>
        </field-validator>
    </field>
    
    <field name="userBean.age">
        <field-validator type="required">
            <message>request integer</message>
        </field-validator>
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message>should between ${min} and ${max}</message>
        </field-validator>
    </field>
</validators>

文件内容就是firstname和lastname必须输入,age必须是整数,并且在1到150之间。至于xml文件的写法,这个可以参照对应的dtd和相应的帮助。
注意的地方,1,引用firstname等字段的时候,前面加上了userBean,这个userBean是定义在action的变量,这点要一致。
2,对一个字段的多个验证可以写在一起,可以参看age字段。
3,可以使用表达式引用设定的参数值。为${参数名}的形式。

这个文件配置完了,就可以运行了,运行一下,什么都不输入,效果如图。

第二种方法,在第一种方法的基础上进行修改。
把validation.xml文件中的内容修改一下。

文件名:LoginAction-validation.xml
文件位置:和action文件同目录
文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
 <field name="userBean">
        <field-validator type="visitor">
            <param name="context">user</param>
            <param name="appendPrefix">true</param>
            <message key="appendPrefix">user‘‘s </message>
        </field-validator>
    </field>
</validators>

这种方法是将具体要验证的bean的项目验证写在另外一个validation文件中。
红字的部分:
userBean指定了action中变量的名字。
visitor是固定的写法。
user是另外一个validation文件的名字中的一部分。

好了,另外一个validation文件的内容如下:
文件名:UserBean-user-validation.xml
文件位置:和UserBean的目录一致
文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

<field name="firstname">
        <field-validator type="requiredstring">
            <message>request firstname</message>
        </field-validator>
    </field>
    
    <field name="lastname">
        <field-validator type="requiredstring">
            <message>request lastname</message>
        </field-validator>
    </field>
    
    <field name="age">
        <field-validator type="required">
            <message>request integer</message>
        </field-validator>
        <field-validator type="int">
            <param name="min">1</param>
            <param name="max">150</param>
            <message>should between ${min} and ${max}</message>
        </field-validator>
    </field>
</validators>

注意地方,1文件的命名,为“bean的class名-context参数指定的值-validation.xml”
2,文件中字段的名字的地方,不需要有userBean的前缀。

好,执行一下,效果如图:

总结一下:
第一种validation方式,把验证集中action的验证文件中。当验证的内容少或者不同的action验证的内容重复性小的时候适用。
第二种validation方式,把验证集中在bean的验证文件中。当多个action都需要对相同bean的内容进行验证

struts2中两种validation.xml的配置方式_百度文库

时间: 2024-08-29 21:19:43

struts2中两种validation.xml的配置方式_百度文库的相关文章

常用的两种spring、mybatis 配置方式

在之前的文章中总结了三种方式,但是有两种是注解sql的,这种方式比较混乱所以大家不怎么使用,下面总结一下常用的两种总结方式: 一. 动态代理实现 不用写dao的实现类 这种方式比较简单,不用实现dao层,只需要定义接口就可以了,这里只是为了记录配置文件所以程序写的很简单: 1.整体结构图: 2.三个配置文件以及一个映射文件 (1).程序入口以及前端控制器配置 web.xml <?xml version="1.0" encoding="UTF-8"?> &

ASP.NET Core MVC 中两种路由的简单配置

1.全局约定路由 这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由. 当建立好一个mvc项目里,路由都是默认配置好的. 如果建立的是空项目那么需要手动配置: 1.需要在ConfigureServices方法中添加mvc服务 services.AddMvc(); 2.在Configure添加mvc中间件: app.UseMvcWithDefaultRoute(); //添加mvc中间件并使用默认路由配置 这里添加mvc中间时使用的是默认的路由配置,默认的路由配置就是跟

Mybatis-plus的两种分页插件的配置方式

第一种: package com.paic.ocss.gateway.admin.config; import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.an

Java中两种获取Stream流的方式

获取流 java.util.stream.Stream<T> 是Java 8新加入的最常用的流接口.(这并不是一个函数式接口.) 获取一个流非常简单,有以下几种常用的方式: 所有的 Collection 集合都可以通过 stream 默认方法获取流; Stream 接口的静态方法 of 可以获取数组对应的流. 根据Collection获取流 首先, java.util.Collection 接口中加入了default方法 stream 用来获取流,所以其所有实现类均可获取流. import j

MyEclipse10中两种FreeMarker插件的安装与配置

--------------------非原创 第一个插件是:freemarker-ideMyEclipce10.0中安装FreeMarker插件,这绝对是最简单的方法.步骤如下:(一)打开http://sourceforge.net/projects/freemarker-ide/files/ 下载最新版本,目前本人下载时最新版本是:freemarker-ide-0.9.14(二)将其解压,将hudson.freemarker_ide_0.9.14文件夹放入MyEclipse安装目录dropi

mysql 执行 cannot found mac安装mysql的两种方法(含配置)

mac安装mysql的两种方法(含配置 此时我们在命令行输入mysql -uroot -p命令会提示没有commod not found,我们还需要将mysql加入系统环境变量. (1).进入/usr/local/mysql/bin,查看此目录下是否有mysql,见pic6. (2).执行vim ~/.bash_profile 在该文件中添加mysql/bin的目录,见pic7: PATH=$PATH:/usr/local/mysql/bin 添加完成后,按esc,然后输入wq保存. 最后在命令

Javascript中两种最通用的定义类的方法

在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定义描述为对象的配方(先看一下例子会比较容易理解).定义类的方法有很多种,这里有两中较为通用的方法,大家参考一下.这两种方法均可以解决 构造函数会重复生成函数,为每个对象都创建独立版本的函数的问题.解决了重复初始化函数和函数共享的问题??提示音:http://www.huiyi8.com/tishiy

List集合中两种遍历方式

遍历List集合中的元素的方法有两种: 第一种:利用迭代器遍历 代码1: // 迭代器 Iterator it=list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } 或者代码2: for(Iterator it=list.iterator();it.hasNext();) { System.out.println(it.next()); }// 与while循环相比优点:对象it在循环结束后,变为垃圾,自动

JAVA 中两种判断输入的是否是数字的方法__正则化_

JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengzehua_test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { System.out.println("请输入第一个数字:"