Struts2利用验证框架实现数据验证(十一)上

简介: Struts2利用验证框架实现数据验证(十一)

数据验证,分为前端验证和后端验证。


前端验证主要是通过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 域错误:


20200419142007960.png


输入网址: http://localhost:8080/Struts_Validate/User_action, 显示action 域错误


20200419141925533.png


显示字段错误时,如用户名 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 域错误:


20200419142030627.png

输入网址: http://localhost:8080/Struts_Validate/User_action, 显示action 域错误


20200419142043760.png






相关文章
|
监控 Oracle 小程序
2021 最新版 JDK 1.8 下载与安装 步骤演示 (图示版)(一)
2021 最新版 JDK 1.8 下载与安装 步骤演示 (图示版)
1376 0
2021 最新版 JDK 1.8 下载与安装 步骤演示 (图示版)(一)
|
弹性计算 数据可视化 关系型数据库
【最佳实践】Filebeat实现MySQL日志轻量化发送至Elasticsearch
在今天的文章中,我们来详细地描述如果使用Filebeat把MySQL的日志信息传输到Elasticsearch中。
4679 0
【最佳实践】Filebeat实现MySQL日志轻量化发送至Elasticsearch
|
11月前
|
存储 监控 Oracle
Oracle 的集群文件系统(Cluster File System)有哪些特点?
Oracle 集群文件系统(CFS)是 Oracle 集群架构的关键组件,允许多节点共享存储资源。其特点包括:多节点访问和高可用性、确保数据一致性的并发控制与锁管理、通过缓存和负载均衡优化性能、支持动态扩展和分布式架构、提供权限管理和加密保障安全性、与 Oracle RAC 和 ASM 集成,以及具备图形化管理界面和监控工具。
|
存储 Kubernetes API
Kubernetes(K8S) kubesphere 介绍
Kubernetes(K8S) kubesphere 介绍
407 2
|
JavaScript 前端开发
【前端 - Vue】关于ESlint代码规范及格式化插件
【前端 - Vue】关于ESlint代码规范及格式化插件
|
缓存 NoSQL Redis
如何在Python中使用Redis或Memcached进行缓存?
如何在Python中使用Redis或Memcached进行缓存?
282 2
|
存储 Java Linux
maven命令上传jar包到nexus
maven命令上传jar包到nexus
794 0
|
开发框架 负载均衡 监控
既然有了HTTP,为什么还要RPC?
既然有了HTTP,为什么还要RPC?
|
自然语言处理 安全 Unix
了解一下新工具ULID?
了解一下新工具ULID?
401 0