您的位置:首页 > 编程语言 > Java开发

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

2016-10-05 22:14 513 查看

背景

在我们的实际应用中,数据校验是一个非常常见的东西。例如,在用户注册系统中,肯定是要先表单校验的,然后一般来说,校验失败的东西,放在表单后面。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>


分析到此结束

若有不足之处,请不吝赐教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0 表单