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

Posted 专注改变人生。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(十六)客户端验证与struts2中的服务器端验证相关的知识,希望对你有一定的参考价值。

一、客户端验证:

 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插件来验证。

 

以上是关于(十六)客户端验证与struts2中的服务器端验证的主要内容,如果未能解决你的问题,请参考以下文章

Struts2-拦截器

struts2.0的工作原理?

Struts2的输入校验——校验规则文件的编写

深入分析JavaWeb 46 -- Struts2数据校验与国际化

将服务器端和客户端身份验证与 WebAPI 相结合

Struts2系列:(14)Struts2验证