(十六)客户端验证与struts2中的服务器端验证

一、客户端验证:

  •     即用javaScript来验证。
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     <%@ taglib prefix="s" uri="/struts-tags" %>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <%String path=request.getContextPath(); %>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 9 <title>Insert title here</title>
10 <script type="text/javascript">
11
12     function check(){
13 14         var userName=document.getElementById("username");
15
16         if(userName.value==""){
17
18             window.alert("用户名不能为空");
19             return false;
20
21         }else{
22
23             return true;
24         }
25
26     }
27 </script>
28
29 </head>
30 <body>
31     <form action="<%=path%>/struts/exam">
32         用户名:<s:textfield name="username" id="username"></s:textfield><br/>
33         <s:submit  value="提交1"  theme="simple" onclick="return check();" ></s:submit>
34     </form>
35 </body>
36 </html>

结果:

  • <s:submit  value="提交1"  theme="simple" onclick="return check();" ></s:submit>  当check函数返回一个false值的时候,表单就不会被提交到服务器端,否则即使在javaScript中提示错误也会被

    提交到后台。

二、服务器端验证:

index.jsp:不做验证,直接把用户填写的信息提交到后台。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%String path=request.getContextPath(); %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="<%=path%>/userAction!save">
        用户名:<s:textfield name="username" id="username"></s:textfield><s:fielderror name="username_error" />
        <br/>
        <s:submit  value="提交1"  theme="simple"  ></s:submit>
    </form>
</body>
</html>

Example.java:

package action;

import com.opensymphony.xwork2.validator.annotations.ValidationParameter;

import actionUtil.BaseAction;

public class Example extends BaseAction{

    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String execute() throws Exception {

        return null;
    }

    /**
     * 某个方法调用前会先调用(validate+该方法名)这个方法,该方法名首字母要大写
     */
    public void validateSave(){

        if(username.equals("")){
            /**
             *如果有错误则添加一个错误元素,并返回到result为input的页面中去
             *在这个页面中可以用<s:fielderror name="username_error" />把错误小心打印出来。
             */
            this.addFieldError("username_error", "用户名不能为空");

        }

        System.out.println("hello");

    }

    public String save(){

        System.out.println("save方法 ");
        return null;
    }

}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />

  <package name="default" namespace="/" extends="struts-default">
    <action name="userAction" class="action.Example">
        <result name="input">/index.jsp</result>
    </action>
    </package>
</struts>

结果:

  • 如结果可知: 当index.jsp用户填写完表单提交到save方法之前,会先调用validateSave方法(validate+该方法名【方法首字母大写】),然后再调用save方法。validateSave里判断用户名是否有填写,如果为空则添加一个错误元素 this.addFieldError("username_error", "用户名不能为空");,并返回到result为input 的页面中去,本题struts.xml设定了input页面仍为本页面(index.jsp),并在这个页面中用<s:fielderror name="username_error" /> 打印出错误元素为username_error" 的具体错误信息。
  • 这种验证方法虽然也能够验证,但是不足的是,但用户提交了错误信息之后,想要返回到本页面修改,那么将会丢失原来填好的数据,只能从新开始填写。


  • 总结:推荐使用客户端验证,尤其是用JQuery-validation插件来验证。
时间: 2024-12-28 20:51:07

(十六)客户端验证与struts2中的服务器端验证的相关文章

struts2中使用ajax验证邮箱(用户名)是否被注册

action类: package com.grace.myblog.view.action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.springframework.stereot

【管理心得之三十六】《黄帝内经》中的一句话

一则故事--------------------------------------- 古代有一天,魏文王问名医扁鹊说:“你们家兄弟三人,都精于医术,到底哪一位最好呢?扁鹊答:“长兄最好,中兄次之,我最差.文王再问:“那么为什么你最出名呢? 扁鹊答:“长兄治病,是治病于病情发作之前.由于一般人不知道他事先能铲除病因,所以他的名气无法传出去:中兄治病,是治病于病情初起时.一般人以为他只能治轻微的小病,所以他的名气只及本乡里.而我是治病于病情严重之时.一般人都看到我在经脉上穿针管放血.在皮肤上敷药等

FineUI(开源版)v6.0中FState服务器端验证的实现原理

前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的发展:http://fineui.com/donate/ FineUI的FState与ViewState 早在2013-01 我曾写过一篇文章,对FState有详细介绍:http://www.cnblogs.com/sanshi/archive/2013/01/08/2850459.html 现在来

第十六章 没有银弹 ---软件工程中的根本和次要问题

http://blog.csdn.net/zuochao_2013/article/details/73614151 在未来的十年内,无论是在技术还是管理方法上,都看不出有任何突破性的进步,能够保证在十年内大幅度地提高软件的生产率.可靠性和简洁性. 一.摘要 所有软件根本任务:打造构成抽象软件实体的复杂概念结构 次要任务:使用编程语言表达这些抽象实体,在空间和时间限制下将它们映射成机器语言       二.根本困难 软件开发中困难的部分是规格说明.设计和测试这些概念上的结构,而不是对概念进行表达

Java学习总计(二十六)——JavaScript正则表达式,Js表单验证,原生js+css页面时钟

一.JavaScript正则表达式1.exec检索字符串中指定的值,返回找到的值,并确定其位置2.test检索字符串中指定的值,返回true或false3.正则表达式对象的创建:(1)方式一:Var rgex=new RegExp("[0-9]","模式");(2)方式二:简便写法,用双斜杠//把正则表达式的内容括起来例1(正则创建,使用test()方法): <!DOCTYPE html> <html> <head> <me

《激荡三十年》十六、国有企业改革(中)——“抓大放小”

之前我们说了1992年证监会成立,资本市场给国有企业输血.使得中国资本市场的非理性.巨大投机性和没有投资价值的特点在这个时候就奠定下来了.紧接着朱镕基肯定诸城经验为国有企业的产权改革带来了曙光,中央确立"抓大放小"的改革方针. 那么抓大放小,小的卖掉没有问题,主要是大的要怎么样来抓呢? 在这里我要简单的说一下当时的整个市场状况.之前在80年代,我国处于短缺经济,那么作为80年代的企业,如果你能够进行大规模的制造.能够搞科学管理,那么你就可以吃得开.而到了90年代就有了很大的不同,因为我

Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法

原文地址https://www.cnblogs.com/zhaof/p/7196197.html 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或者被丢弃而不再进行处理 item pipeline的主要作用: 清理html数据 验证爬取的数据 去重并丢弃 讲爬取的结果保存到数据库中或文件中 编写

linux平台学x86汇编(十六):在汇编语言中调用C库函数

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 其实在汇编语言中也是可以使用C库函数的,这一节我们来看一下如何在汇编语言中调用C库函数以使得我们的程序看上去很方便地和用户交互. C库包括C程序通用的喝多函数,如printf和exit等,下面我们紧接着上一节的知识来实现一个两整数想加的计算并输出计算结果的程序. # libc.s .section .data output: .asciz "The result is %d.

第三十六课、文本编辑器中的功能交互

一 .判断未保存的数据 1.QPlainTextEdit能够触发与编辑功能相关的信号 2.解决方案 (1).定义槽函数void onTextChanged() (2).映射textChanged()到槽函数 (3).定义成员变量bool m_isTextChanged = false; (4).当文本框内容发生改变时, m_isTextChanged = true; (5).当m_isTextChanged 为真时,则保存数据 二.文本编辑器的持续开发 1.文件打开操作 2.文件新建操作 #if