Struts2学习——0600简单数据校验

背景

在我们的实际应用中,数据校验是一个非常常见的东西。例如,在用户注册系统中,肯定是要先表单校验的,然后一般来说,校验失败的东西,放在表单后面。Struts2实际上可以利用Action中的方法,把错误的东西先addErrorField里,然后在jsp中利用struts2的标签再拿出来。

简单数据校验

其实正常工程中的数据校验要更难,但是,都是从简单的一点点过渡来的。这次把文档的顺序改一下,我们先看看效果。

1. 效果

index.jsp
这里写图片描述

error.jsp
这里写图片描述

可以从地址栏看到,
    *namespace=/user
    *action name=user
    *param name=name
    *param value=a
校验失败,得到的信息
    *name is error
    *name is too long 
    *还有个debug链接

点开debug之后

这里写图片描述

这里写图片描述

里面包含了一个Value Stack Contents和一个Stack Context来保存相关信息

2. 分析

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>
    <constant name="struts.devMode" value="true" />
    <package name="user" extends="struts-default" namespace="/user">
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
            <!-- 通过校验之后肯定有两个result的,通过的返回success,不通过的返回error -->
            <result>/user_add_success.jsp</result>
            <result name="error">/user_add_error.jsp</result>
        </action>
    </package>
</struts>

UserAction

package com.bjsxt.struts2.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    //可以看到用的是Action接收参数方式
    private String name;

    public String add() {
        //进行简单的数据校验,如果传入的参数是空,或者不是admin就是校验失败
        if(name == null || !name.equals("admin")) {
        /*
        将两条错误信息,加入到Struts的相关空间里面,其实这个空间,就是我们刚刚看到的value stack,
        里面有一个FieldError,这个空间是个map,前面是key,就是这里的name,后面是value,
        value是一个数组可以存多条错误信息,这里就存了两条。
        */
            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;
    }


}

index.jsp

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
        <base href="<%=basePath %>"/>
        <title>Insert title here</title>
    </head>
    <body>
        使用addFieldError方法和s:fieldError标签简单处理数据校验
        <a href="user/user!add?name=a" >添加用户</a>
    </body>
</html>

user_add_error.jsp

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

<!-- 引入struts2的标签 -->
<%@taglib uri="/struts-tags" prefix="s" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
    <!-- 这是一句话,说用户添加错误 -->
    User Add Error!
    <!-- 这个是从FieldError中拿到key=name的那个数组,然后这个<s:fielderror>标签会帮你包装,
         变成两条无序的数据。这个其实不是我们想要的,因为它没事儿还包装了,我们就想到一条字符串,
         然后我们可以自己用css对这字符串进行修饰 -->
    <s:fielderror fieldName="name" theme="simple"/>
    <br />

    <!-- <s:property>这个标签就完成了我们这个愿望,value也可以=fielderrors.name[0]
         意义是从value stack中的errors域中,拿到key=name的value数组中的第一条数据,在本实例中,
         [0]也可以换成[1],以为name有两条数据
     -->
    <s:property value="errors.name[0]"/>

    <!-- 
    这个就是得到我们那个debug的超链接,点击之后,
    保存在value stack和stack context中的所有内容信息,都能看到 
    -->
    <s:debug></s:debug>
</body>
</html>

分析到此结束

若有不足之处,请不吝赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值