Spring Form Validation(表单验证)

增加表单验证,首先要实现一个表单,想要操作表单我们需要将控制器类继承SimpleFormController类,现在我们创建一个注册表单来理解它的工作过程,这个SimpleFormController在Spring3.0以后已经不推荐使用了,如果使用3.0后以上版本建议使用annotation来代替。

首先定义我们的控制器类:

package com.zcl.spring.validation;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;


@SuppressWarnings("deprecation")
public class UserController extends SimpleFormController {
	private UserService userService ;
	public UserController(){
		setCommandClass(User.class) ;
		setCommandName("user") ;
	}
	public void setUserService(UserService userService){
		this.userService = userService ;
	}
	@Override
	protected ModelAndView onSubmit(Object command) throws Exception{
		User user = (User)command ;
		userService.add(user) ;
		return new ModelAndView("userSuccess","user",user) ;
	}
}
定义User的域对象:

package com.zcl.spring.validation;

public class User {
	private String name ;
	private String password ;
	private String gender ;
	private String country ;
	private String aboutYou ;
	private String[] community ;
	private boolean mailingList ;
	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 String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getCountry() {
		return country;
	}
	public void setCountry(String country) {
		this.country = country;
	}
	public String getAboutYou() {
		return aboutYou;
	}
	public void setAboutYou(String aboutYou) {
		this.aboutYou = aboutYou;
	}
	public String[] getCommunity() {
		return community;
	}
	public void setCommunity(String[] community) {
		this.community = community;
	}
	public boolean isMailingList() {
		return mailingList;
	}
	public void setMailingList(boolean mailingList) {
		this.mailingList = mailingList;
	}
}

UserService接口:

package com.zcl.spring.validation;

public interface UserService {
	public void add(User user) ;
}

实现UserService接口类:

package com.zcl.spring.validation;

public class UserServiceImpl implements UserService {

	@Override
	public void add(User add) {
		System.out.println("User add Success") ;
	}
}

基本工作做完了,现在我们要验证表单域,此时我们需要一个单独的实现了Validator接口的 UserValidator 类。并覆写validate()方法执行所有的验证操作。在jsp页面我们需要增加form:errors 标签来显示错误。你需要一个单独存取错误信息的文件,并在配置文件中关联上。

package com.zcl.spring.validation;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class UserValidator implements Validator {

	@Override
	public boolean supports(Class<?> arg0) {
		return User.class.isAssignableFrom(arg0);
	}

	@Override
	public void validate(Object target, Errors errors) {
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "name.required") ;
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "password.required") ;
		ValidationUtils.rejectIfEmpty(errors, "gender", "gender.required") ;
		ValidationUtils.rejectIfEmpty(errors, "country", "country.required") ;
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "aboutYou", "aboutYou.required") ;
		User user = (User)target ;
		if(user.getCommunity().length==0){
			errors.rejectValue("community", "community.required") ;
		}
	}
}

存取错误信息文件message.properties在src目录下,信息如下:

name.required = User Name is required
password.required = Password is required
gender.required = Gender is required
country.required = Country is required
aboutYou.required = About You is required
community.required = Select at least one community

配置dispatcher-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.springframework.org/schema/beans"> 
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix">
			<value>/WEB-INF/jsp/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" 
		p:basename="message" />
	<bean id="userService" class="com.zcl.spring.validation.UserServiceImpl" />
	<bean id="userValidator" class="com.zcl.spring.validation.UserValidator" />
	<bean name="/userRegistration.html" class="com.zcl.spring.validation.UserController"
			p:userService-ref="userService" p:formView="userForm" 
			p:successView="userSuccess" p:validator-ref="userValidator" />
</beans>



注册页面如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registration Page</title>
<style>
.error {
color: #ff0000;
font-style: italic;
}
</style>
</head>
<body>

<form:form method="POST" commandName="user">
	<table>
		<tr>
			<td>User Name :</td>
			<td><form:input path="name" /></td>
			<td><form:errors path="name" cssClass="error" /></td>
		</tr>
		<tr>
			<td>Password :</td>
			<td><form:password path="password" /></td>
			<td><form:errors path="password" cssClass="error" /></td>
		</tr>
		<tr>
			<td>Gender :</td>
			<td><form:radiobutton path="gender" value="M" label="M" /> 
				<form:radiobutton path="gender" value="F" label="F" /></td>
			<td><form:errors path="gender" cssClass="error" /></td>	
		</tr>
		<tr>
			<td>Country :</td>
			<td><form:select path="country">
				<form:option value="" label="Select" />
				<form:option value="1" label="India" />
				<form:option value="2" label="USA" />
				<form:option value="3" label="UK" />
			</form:select></td>
			<td><form:errors path="country" cssClass="error" /></td>
		</tr>
		<tr>
			<td>About you :</td>
			<td><form:textarea path="aboutYou" /></td>
			<td><form:errors path="aboutYou" cssClass="error" /></td>
		</tr>
		<tr>
			<td>Community :</td>
			<td><form:checkbox path="community" value="Spring"
				label="Spring" /> <form:checkbox path="community" value="Hibernate"
				label="Hibernate" /> <form:checkbox path="community" value="Struts"
				label="Struts" /></td>
			<td><form:errors path="community" cssClass="error" /></td>
		</tr>
		<tr>
			<td colspan="3"><form:checkbox path="mailingList"
				label="Would you like to join our mailinglist?" /></td>
		</tr>
		<tr>
			<td colspan="3"><input type="submit" value="Register"></td>
		</tr>
	</table>
</form:form>

</body>
</html>

显示信息页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Success Page</title>
</head>
<body>
User Details
<hr>
User Name   : ${user.name} <br/>
Gender      : ${user.gender} <br/>
Country     : ${user.country} <br/>
About You   : ${user.aboutYou} <br/>
Community   : ${user.community[0]}  ${user.community[1]} ${user.community[2]}<br/>
Mailing List: ${user.mailingList} 
</body>
</html>

加入我们输入不符合要求将显示如下:



仅仅做一下笔记,没有把好多原理写出来。不过我觉得那得自己去查找并思考后体会才会深。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用uni-app自带的表单验证组件来验证表单。首先,在表单中添加验证规则,然后在提交表单时,使用uni-app提供的验证方法来验证表单数据。如果表单数据验证失败,则可以提示用户错误信息。具体实现方法可以参考uni-app官方文档中的表单验证部分。 ### 回答2: Uniapp是一个跨平台的开发框架,可以用于开发多种类型的应用程序,包括 Web 应用程序。在 Uniapp 中,我们可以使用 Vue.js 的表单验证方式来验证表单。下面是简单的步骤: 1. 导入验证插件:在 main.js 文件中导入 `vee-validate` 或其他验证插件。 2. 创建表单:在页面中创建表单,并为表单中的每个输入字段添加相应的验证规则和消息提示。 3. 添加验证代码:在表单的提交事件或其他需要验证的事件中,编写验证代码。 4. 运行验证:通过调用验证函数来运行验证,根据验证结果执行相应的操作。 具体步骤如下所述: 1. 导入验证插件:在 main.js 文件中,使用以下代码导入 `vee-validate` 插件: ``` import { ValidationProvider, ValidationObserver, extend } from 'vee-validate'; import { required, email } from 'vee-validate/dist/rules'; Vue.component('ValidationProvider', ValidationProvider); Vue.component('ValidationObserver', ValidationObserver); extend('required', required); extend('email', email); ``` 2. 创建表单:在页面中,使用 `ValidationProvider` 组件来包裹输入字段,并在组件上添加 `rules` 和 `message` 属性来设置相应的验证规则和消息提示。例如: ``` <ValidationProvider rules="required" v-slot="{ errors }"> <input type="text" v-model="name" /> <span>{{ errors[0] }}</span> </ValidationProvider> ``` 3. 添加验证代码:在表单的提交事件或其他需要验证的事件中,编写相应的验证代码。例如: ``` methods: { submitForm() { this.$refs.observer.validate().then(valid => { if (valid) { // 验证通过,执行相应的操作 // ... } else { // 验证失败,对错误进行处理 // ... } }); } } ``` 4. 运行验证:通过调用 `$refs` 对象中的 `observer` 组件的 `validate` 方法来运行验证。根据验证的结果执行相应的操作。 这只是一个简单的使用示例,你还可以根据具体需求自定义更复杂的验证规则和逻辑。希望对你有帮助! ### 回答3: uniapp提供了一种方便的方式来验证form表单。以下是一个简单的步骤: 1. 在form表单中,给每个需要验证的input添加一个`name`属性。例如:`<input name="username" />` 2. 创建一个`data`对象来存储需要验证的字段。例如:`data: { username: '', password: '', email: '' }` 3. 在form表单外部创建一个`methods`对象,用于存放验证的方法。例如: ``` methods: { // 验证用户名 validateUsername() { if (this.data.username === '') { // 验证失败,给出提示 uni.showToast({ title: '请输入用户名', icon: 'none' }) return false } // 验证成功 return true }, // 验证密码 validatePassword() { // ... }, // 验证邮箱 validateEmail() { // ... }, // 提交表单 submitForm() { if (this.validateUsername() && this.validatePassword() && this.validateEmail()) { // 所有字段验证通过,可以提交表单 // ... } } } ``` 4. 在form表单中的提交按钮上绑定`submitForm`方法。例如:`<button @click="submitForm">提交</button>` 5. 在`submitForm`方法中调用各个字段的验证方法,如果所有字段验证通过,则可以提交form表单。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值