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

时间:2024-08-07 13:36:56

一、客户端验证:

  •     即用javaScript来验证。
 <%@ 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>
<script type="text/javascript"> function check(){
var userName=document.getElementById("username"); if(userName.value==""){ window.alert("用户名不能为空");
return false; }else{ return true;
} }
</script> </head>
<body>
<form action="<%=path%>/struts/exam">
用户名:<s:textfield name="username" id="username"></s:textfield><br/>
<s:submit value="提交1" theme="simple" onclick="return check();" ></s:submit>
</form>
</body>
</html>

结果:

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

  • <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>

结果:

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

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

  • 如结果可知: 当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插件来验证。