今天讲解下简单的数据验证。之前已经说明了如何从传递参数到后台,然后我们要讲解一下,传递的参数到后台去,看看是否非法,然后从后台返回相应的响应到前台来。
在主页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的第一个值了。