如果你对客户端的js校验不放心的话,不妨使用服务器端校验。该校验是无法绕过的。struts2提供的验证框架可以实现这种功能。struts2提供两种校验方法:一种是写XML校验。另外一种是在action中写validate方法。这个例子将会用到后者。
1、包结构:
2、源代码:
UserAction.java
struts.xml:
index.jsp:
1、包结构:
2、源代码:
UserAction.java
package action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void validateSave(){ if("whatisjava".equals(name)){ this.addFieldError("dataErr", "该名称已存在"); } } public String save(){ System.out.println("save"); return "success"; } }
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="struts" extends="struts-default" namespace="/"> <action name="save" class="action.UserAction" method="save"> <result name="success">index.jsp</result> <result name="input">index.jsp</result> </action> </package> </struts>
index.jsp:
<%@ page pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>validate</title> </head> <body> <h1> tstruts2的validate()方法 </h1> <li> 继承ActionSupport类 </li> <li> 遵循以下命名规则:validate+方法名。 <br> 例如:validateSave(); save()为页面要访问的action执行的方法名称。 </li> <li> 在校验方法中添加验证信息:this.addFieldError("dataErr", "该记录已存在。"); </li> <li> 页面上添加struts2标签:s:fielderror key="dataErr" 其中dataErr为校验方法中的fieldError名。 </li> <hr> 下面做一个测试,当用户输入的用户名为whatisjava时候将视为数据已存在。表单不会被提交。 <br /> <form action="save.action"> <s:fielderror key="dataErr"></s:fielderror> <br> 用户名: <input type="text" name="name"> <br> 密 码: <input type="password" name="password"> <br> <button type="submit"> 提交 </button> </form> </body> </html>