今天讲解下简单的数据验证。之前已经说明了如何从传递参数到后台,然后我们要讲解一下,传递的参数到后台去,看看是否非法,然后从后台返回相应的响应到前台来。
在主页index.jsp访问http://localhost:8080/Struts2_1100_SimpleDataVilation/user!add?name=a 传递name的值为a 。
UserAction.java
package com.tfj.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String add(){
if(name==null||!name.equals("admin")){
addFieldError("name", "name is too illegal");
return ERROR;
}
System.out.println("name="+name);
return SUCCESS;
}
}
在add()方法里判断name是否等于admin,调用addFieldError("name","name is illegal")方法,返回Error页面,addFieldError()是用来关联到返回的页面,前者是属性,后者是返回的内容。提交后会返回Error会调用user_add_error.jsp.
user_add_error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'user_add_error.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
user add error. <br>
<s:fielderror fieldName="name" theme="simple"/>
<br>
<s:property value="errors.name[0]"/>
<s:debug>
</s:debug>
</body>
</html>
运行结果如图所示
<%@ taglib uri="/struts-tags" prefix="s" %>需要引用taglib标签这是struts的标签,prefix="s"代表前缀是s,
<s:fielderror fieldName="name" theme="simple"/>输出错误信息,但是这种输出是有文字格式的,theme定义了格式,这种情况有时候就和网站的整体风格或者美工不相符了,那么我们要怎么单独拿出字符串呢?
<s:debug>是我们很常用的的一种方法,点开debug得到
可以用来查看值栈和内容栈,<s:property value="errors.name[0]"/>就可以调用property 里的error里的name的第一个值了。