zoukankan      html  css  js  c++  java
  • 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="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="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="errors.name"/>
    

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

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

    比如:

    <s:property value="#request"/>
    
  • 相关阅读:
    打印沙漏
    秋季学期学习总结
    反射
    线程(二)join、yeild、同步(synchronized:同步块,同步方法;,Lock)、非线程安全单例模式、线程安全单例模式、多线程售卖电影票处理、通过线程依次打印A、B、C、wait和sleep
    线程(一)
    红包计算的方法(通过2倍指数法进行计算,通过线性切割法计算)
    Math常用类、Date类、Calendar类、两者相互转换
    Java包(访问修饰符的范围)、String字符串、StringBuilder类、基本类型和引用类型
    编写一个系统(登录、注册、验证用户名密码和验证码、覆盖存储用户)
    递归的使用:调用方法自身
  • 原文地址:https://www.cnblogs.com/yzy-blogs/p/6701367.html
Copyright © 2011-2022 走看看