首页 > 代码库 > Struts2中对数据简单的验证和property标签的用法

Struts2中对数据简单的验证和property标签的用法

使用addFieldError方法和s:fieldError标签简单处理数据校验

场景:对一个用户名进行验证,如果用户名不合法,则显示给客户端查看信息。

URL请求地址:

http://localhost:8080/Struts2_SimpleDataValiation/user/user!add?name=a

 

 访问的Struts2配置,namespace="/user",action的name="user",Action所执行的方法method="add"并且传入了一个参数name=a

配置文件如下:

<?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>
    <constant name="struts.devMode" value="http://www.mamicode.com/true" />
    <package name="user" extends="struts-default" namespace="/user">
        <action name="user" class="com.chongqing.action.UserAction">
            <result>/user_add_success.jsp</result>
            <result name="error">/user_add_error.jsp</result>
        </action>
    </package>
</struts>

 

根据配置文件可以得知action所对应的类为com.chognqing.action.UserAction,并且具有两个结果集(success和error).代码如下:

package com.chongqing.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	private String name;
	
	public String add() {
		if(name == null || !name.equals("admin")) {
			//验证错误,返回错误信息,addFieldError中同一个name可以添加两个不同的字符串
			this.addFieldError("name", "name is error");
			this.addFieldError("name", "name is too long");
			return ERROR;
		} 
		return SUCCESS;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}	
}

 

根据Action类代码,可以看到Action是利用Action的成员属性(name)来接受参数值,并且使用this.addFieldError()方法添加错误信息,以便前台可以访问到。

this.addFieldError(name, errorMessage);

 

注:此方法是使用继承了ActionSupport父类的
     name:可以是类的属性名称,但一般建议使用哪个成员属性出错,就用哪个
     errorMessage:添加的信息

在客户端获取这些信息,如下:

<body>
	User Add Error!
	<s:fielderror fieldName="name" theme="simple"/>
	<br />
	<s:property value="http://www.mamicode.com/errors.name[0]"/>
	<s:debug></s:debug>
</body>

 

注:使用<s:fielderror>标签,需要使用<%@taglib%>命令引用Struts2的标签库如下:

<%@taglib uri="/struts-tags" prefix="s" %>

 

1、<s:fielderror>标签:获取使用addFieldError()方法添加的信息。

FiledName:指定信息的名称。
Theme: 指定显示的主题。
注:使用此标签获取的错误信息,Struts强制添加了css的修饰。生成的HTML代码如下(不常用):

<!--Class="errorMessage"是Struts2已经设置好的一个css了,这个方式不方便我们自定义样式-->
<ul class="errorMessage">
	<li><span>name is error</span></li>
	<li><span>name is too long</span></li>
</ul>

 

2、<s:debug></s:debug>:这是标签的写方式,会在页面上产生一个链接,点击后显示如下(Struts2生成的一些信息):

技术分享

3、<s:property>标签:获取值堆栈属性所对应的值。

<s:property value="http://www.mamicode.com/errors.name"/>

 

注:value:指定值堆栈的属性名及数据下标等。

例如:vhttp://www.mamicode.com/alue="a":获取Action类的成员属性a的值
         value="http://www.mamicode.com/errors":获取errors属性的对象Map值
         value="http://www.mamicode.com/errors.name":获取errors属性的对象Map的key为name的value
         value="http://www.mamicode.com/errors.name[0]" :获取errors属性的对象Map的key为name的value的第一个元素的值。
注:如果获取Action Context中的Key值,需要在前面加#(井号)

比如:

<s:property value="http://www.mamicode.com/#request"/>

 

Struts2中对数据简单的验证和property标签的用法