数据验证,分为前端验证和后端验证。
前端验证主要是通过JavaScript和jQuery来实现,目的是: 减少客户等待的时间,减轻服务器端的压力,用户输入的错误数据,直接提示。
后端验证的目的是: 防止“绕过”客户端,提交非法数据。 在服务器端处理数据之前,确认数据的正确性。
这里只讲后端的验证。
在验证的时候,需要将提示信息展示给前端, Struts2框架提供了两种方式,进行提示信息。 addFieldError() 方法和 addActionError() 方法。
一. addFieldError() 方法和addActionError()方法
一.一 简单小提示
addFiledError(String name,String message) 添加字段范围内的具体的错误。
addActionError(String message) 在Action中添加具体的错误。
在Servlet开发阶段时,返回错误信息 通常用的是 request.setAttribute(“message”,“具体的错误信息”),
现在可以用addFieldError()来进行处理。
对于类中的错误,用addActionError()进行处理。
两者所反映的级别是不一样的. field为字段级别的,action为Action级别的。
一.二 提示错误小例子
一.二.一 编写验证 UserAction
package com.yjl.web.action; import com.opensymphony.xwork2.ActionSupport; /** * @author 两个蝴蝶飞 * @version 创建时间:Aug 30, 2018 8:21:09 PM * User的验证类 */ public class UserAction extends ActionSupport{ private static final long serialVersionUID = 1L; /** * 用addFiledError()方法处理 * 也是用key--value的形式进行展示的. */ public String field(){ this.addFieldError("nameErr","姓名只能是中文"); this.addFieldError("sexErr","性别只能选择男或者女"); this.addFieldError("passwordErr","密码错误"); return SUCCESS; } /** *用 addActionError()方法处理。 */ public String action(){ //通常只写一个错误提示 this.addActionError("第一个类中大错误"); return SUCCESS; } }
一.二.二 配置struts.xml文件
<!--修改ui样式表,不用这一个,用默认的 --> <!--<constant name="struts.ui.theme" value="simple"></constant>--> <package name="validate" extends="struts-default" namespace="/"> <action name="User_*" class="com.yjl.web.action.UserAction" method="{1}"> <result name="success">/WEB-INF/content/message.jsp</result> </action> <!-- 配置跳转页面 --> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package>
一.二.三 编写 /content/message.jsp
<body> <h3>显示Field错误</h3> <!-- 会显示全部的错误 --> <s:fielderror></s:fielderror> <h3>显示单个错误</h3> <s:fielderror> <!-- 只显示name的错误信息 --> <s:param>nameErr</s:param> </s:fielderror> <h3>显示Action错误</h3> <s:actionerror/> </body>
一.二.四 重启服务器,运行
输入网址: http://localhost:8080/Struts_Validate/User_field, 显示field 域错误:
输入网址: http://localhost:8080/Struts_Validate/User_action, 显示action 域错误
显示字段错误时,如用户名 name是否填写错误,密码 password是否填写错误,手机号 phone是否填写错误,通常会显示全部的错误信息。
故一般常用:
<s:fielderror></s:fielderror>
来直接显示所有字段的错误。
一.二.五 hasFieldErrors() 和 hasActionErrors() 进行判断显示
访问 filed 错误时,没有action 错误,但却将Action的提示语都显示出来了,
访问action 错误时,没有filed 错误,但却将 Field的提示语都 显示出来了。
常常需要在 显示错误之前,进行一下判断, 如果有错误,才显示,如果没有错误的话,就不显示 。
用 hasFieldErrors() 用于验证是否有 field 级别的错误。
用 hasActionErrors() 用于验证是否有 action 级别的错误。
一.二.六 重写 /content/message.jsp 页面, 添加判断
<body> <!-- 判断一下,是否有field 范围的错误 --> <s:if test="hasFieldErrors()"> <h3>显示Field错误</h3> <!-- 会显示全部的错误 --> <s:fielderror></s:fielderror> <h3>显示单个错误</h3> <s:fielderror cssErrorStyle="color:red;font-size:20px;"> <!-- 只显示name的错误信息 --> <s:param>nameErr</s:param> </s:fielderror> </s:if> <!--判断一下,是否有 action范围的错误 --> <s:if test="hasActionErrors()"> <h3>显示Action错误</h3> <s:actionerror/> </s:if> </body>
再次进行测试:
输入网址: http://localhost:8080/Struts_Validate/User_field, 显示field 域错误:
输入网址: http://localhost:8080/Struts_Validate/User_action, 显示action 域错误